『新たなる航海 - 挑戦という名の帆を上げて』
『新たなる航海 - 挑戦という名の帆を上げて』
野村隆介は、定年退職してから既に12年が経っていた。老眼鏡をかけた彼の顔には、長年の経験から生まれた深いしわが刻まれていた。彼の書斎の机の上には、『Python入門』という分厚い本が置かれていた。その隣には、彼が長年愛用してきたノートパソコンの最新モデルが光っていた。
「さて、今日はどこまでいけるかな」
彼はマグカップに注いだ緑茶を一口すすり、パソコンの電源を入れた。画面が明るく灯り、プログラミングのためのエディタが開かれる。彼が今取り組んでいたのは、長年のVBA開発で培ったロジックをPythonに移植する試みだった。
「うーん、この部分はどうやって書くんだったかな...」
隆介は眉をひそめ、厚いPython入門書のページをめくった。そのとき、スマートフォンが鳴った。LINEの通知音だ。
「ああ、もしもし、侃汰か?」
隆介は慣れない操作でビデオ通話ボタンを押した。画面には、高校2年生になる孫の侃汰の顔が映った。
「おじいちゃん、カメラをもう少し上に向けて。天井しか映ってないよ
「こうか?いや、まだダメか?...こう?」
画面が揺れまくり、ようやく隆介の顔がフレームに収まった。
「お、いいね、ばっちりだよ」侃汰が笑う。「またコード書いてる?」
「ああ、今日はPythonのクラスとオブジェクト指向プログラミングに挑戦しているところだよ」
「へえ、VBAとは全然違うでしょ?」
「そうだねぇ...」隆介は少し考え込むような表情になった。「正直、頭がこんがらがることもあるよ。昨日なんて、セミコロンをつける癖が抜けなくて、エラーの連続だった」
侃汰は笑いながら言った。「おじいちゃん、それVBAの癖だよ。Pythonはセミコロンいらないんだよ」
「わかっているんだがね、古い犬に新しい芸は難しいというだろう」隆介は自嘲気味に笑った。
「でも、おじいちゃんすごいよ。同級生の祖父母なんて、LINEの使い方で四苦八苦してるって言ってたよ」
「それはね、侃汰。人生は学びの連続なんだ。止まってしまえば、それはもう...」
「終わり?」
「いや、ただの休憩さ」隆介は目を細めて笑った。「問題は、休憩が長すぎると、再起動が大変になることだな」
***
隆介がプログラミングと出会ったのは35歳の時。商社の経理部に配属された彼は、毎月の締め処理に追われる日々を送っていた。当時はExcelのマクロ機能を使って、単純作業を自動化する程度だった。
「For Each cell In Range("A1:G100")」
そんな単純なコードから始まった彼のプログラミング人生。やがてVBAの深みにはまっていった彼は、社内の業務効率化の旗手として次々と革新的なシステムを開発していった
しかし、その道は決して平坦ではなかった。
ある日、彼が作った在庫管理システムがクラッシュし、一日分のデータが消失するという事態が発生した。部長から呼び出された隆介は、頭を下げ続けていた。
「野村、君のシステムのせいで、営業部は大混乱だぞ」
「申し訳ありません。バックアップ機能を実装していなかったことが...」
「君のような年齢でプログラミングなんて、無理があるんじゃないのか?」
当時45歳だった隆介は、その言葉に深く傷ついた。しかし、彼はそこで諦めなかった。その夜、彼は徹夜でシステムを再構築し、自動バックアップ機能を追加した。さらに、予期せぬエラーにも対応できるよう、例外処理も徹底的に実装した。
二週間後、そのシステムは社内で最も信頼性の高いツールとして評価されるようになった。
「野村さん、このシステムのおかげで残業が減りました。ありがとうございます」
営業部の若手社員からそう言われた時、隆介は自分の挑戦が報われたと感じた。
***
「それでね、おじいちゃん。今度の学校の課題でPythonを使ったプロジェクトがあるんだけど、ちょっと相談していい?」
ビデオ通話の向こうの侃汰が言った。
「もちろんだよ。どんな課題かな?」
「データ分析なんだ。自分で選んだテーマについて、データを集めて分析するっていう...」
「おお、それは面白そうだね」隆介の目が輝いた。「PandasとMatplotlibを使えばいいんじゃないかな」
「えっ、おじいちゃん知ってるの?そのライブラリ」
「最近勉強中さ。実はな...」
隆介は椅子を回し、パソコンの画面を見せた。そこには、Pandasを使ったデータフレームと、Matplotlibで作成したグラフが表示されていた。
「わぁ、すごい!これ、何のデータ?」
「私の健康管理データだよ。血圧と体重を毎日記録して、Pythonで分析しているんだ」
画面には、過去6か月間の血圧と体重の推移を示す美しいグラフが表示されていた。
「ねえ、おじいちゃん。どうやってそんなに新しいことを学び続けられるの?」
隆介は少し考えてから答えた。
「秘訣は二つある。一つは、好奇心を絶やさないこと。もう一つは、失敗を恐れないことだ」
「失敗?」
「ああ、この前なんて、データをうっかり全部消してしまってね。バックアップを取っていなかったから大慌てさ」隆介は笑いながら言った。
「それで?」
「結局、最初からデータを入れ直した。おかげで、データ入力の自動化スクリプトを書くことになって、かえって効率的になったよ」
隆介は画面を切り替え、Pythonのスクリプトを見せた。
「python
import pandas as pd
from datetime import datetime
def add_health_data(systolic, diastolic, weight):
today = datetime.today().strftime('%Y-%m-%d')
new_data = pd.DataFrame({
'date': [today],
'systolic': [systolic],
'diastolic': [diastolic],
'weight': [weight]
})
「 try:
df = pd.read_csv('health_data.csv')
df = pd.concat([df, new_data], ignore_index=True)
except FileNotFoundError:
df = new_data」
「 df.to_csv('health_data.csv', index=False)
print(f"Data for {today} added successfully!")」
「なるほど...」侃汰は感心した様子で言った。「じゃあ、失敗も大事なんだね」
「そうだよ。挑戦には失敗がつきものさ。大切なのは、失敗から学んで次に活かすことだ」
侃汰は黙ってうなずいた。
「そうだ、侃汰。今度の週末、うちに来ないか?一緒にデータ分析してみよう」
「本当に?いいの?」
「もちろん。私も君から学べることがたくさんあるはずだよ」
***
週末、侃汰が隆介の家を訪れた。二人は隆介の書斎で向かい合って、それぞれのラップトップを開いていた。
「侃汰、君はどんなデータを分析したいんだい?」
「僕はね、学校の近くのカフェで売れている飲み物のデータを集めたんだ。店長さんに頼んで、過去半年分の販売データをもらったんだよ」
「おお、それは面白そうだね」
侃汰はUSBメモリを取り出し、ノートパソコンに差し込んだ。
「まずはデータを見てみよう」
侃汰が表示したのは、Excel形式の販売データだった。飲み物の種類、日付、時間帯、価格、販売数などの情報が含まれていた。
「なかなか良いデータだね。では、Pythonに読み込んでみようか」
二人は協力してコードを書き始めた。
「python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# データの読み込み
df = pd.read_excel('cafe_sales.xlsx')
# 日付を日付型に変換
df['date'] = pd.to_datetime(df['date'])
# 月ごと、飲み物ごとの売上集計
monthly_sales = df.groupby([pd.Grouper(key='date', freq='M'), 'drink_type'])['sales'].sum().reset_index()」
「おじいちゃん、このコードわかりやすいね。VBAでやるとどうなるの?」
隆介は少し考えてから答えた。
「VBAだとね、もっと複雑になるよ。Excelのシートから一行ずつ読み込んで、Dictionary型のオブジェクトに格納して...」
隆介はその場でVBAのコードを書き始めた。
「vb
Sub AnalyzeSales()
Dim ws As Worksheet
Dim lastRow As Long
Dim dict As Object
Dim monthKey As String
Dim drinkType As String
Dim sales As Double
「 Set ws = ThisWorkbook.Sheets("Sales")
Set dict = CreateObject("Scripting.Dictionary")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
monthKey = Format(ws.Cells(i, 2).Value, "yyyy-mm")
drinkType = ws.Cells(i, 3).Value
sales = ws.Cells(i, 5).Value
If Not dict.Exists(monthKey & "|" & drinkType) Then
dict(monthKey & "|" & drinkType) = sales
Else
dict(monthKey & "|" & drinkType) = dict(monthKey & "|" & drinkType) + sales
End If
Next i
End Sub」
「わぁ、全然違うね」侃汰は驚いた様子で言った。
「そうだね。Pythonは、データ分析に特化したライブラリが充実しているから、コードがシンプルになる。VBAはもともとExcelのマクロ言語だから、データ構造が制限されているんだ」
侃汰はうなずきながら、次のコードを入力し始めた。
「python
plt.figure(figsize=(12, 6))
sns.lineplot(data=monthly_sales, x='date', y='sales', hue='drink_type')
plt.title('Monthly Sales by Drink Type')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()」
「実行してみよう」
コードを実行すると、美しいラインチャートが表示された。各飲み物の月ごとの売上推移がカラフルな線で表現されていた。
「おお、これはいいね!」隆介は感心した。「これを見ると、夏はアイスドリンクが売れていて、冬はホットドリンクが売れているのがわかるね」
「そうだね。あと、抹茶ラテが4月から急に人気になってる。新メニューだったんだって」
二人は楽しそうにデータを分析し続けた。時間が経つのも忘れるほど夢中になっていた。
「侃汰、Pythonすごいね。私もまだまだ勉強することがたくさんありそうだ」
「おじいちゃんこそすごいよ。僕のクラスメイトのおじいちゃんたちとは全然違う」
隆介は少し照れくさそうに笑った。
「それがね、侃汰。私にとって、新しいことを学ぶのは、新しい景色を見るようなものなんだ。VBAを学んだ時も、Pythonを学ぶ今も、その感覚は変わらない」
「新しい景色?」
「そう。知らなかったことを知るという喜び、できなかったことができるようになるという達成感。これは年齢に関係なく、誰もが味わえるものだと思う」
侃汰は静かにうなずいた。
「ただ、年をとるとね、挑戦することに対する恐れが強くなることもある。『もう若くない』『覚えが悪くなった』...そういう言い訳が出てくるんだ」
「おじいちゃんにもあるの?そういう気持ち」
「もちろん」隆介は笑った。「この前なんて、配列とリストの違いでつまずいて、『もうダメだ』と思ったよ。でもね...」
「でも?」
「でも、その壁を乗り越えた時の喜びは、若い頃よりも大きい気がするんだ。年齢という障壁も越えたという満足感があるからかな」
***
翌週、隆介は地域のプログラミング勉強会に参加していた。彼が会場に入ると、若いエンジニアたちが驚いた表情で彼を見つめた。
「野村さん、今日はPythonのデータ可視化について話しましょうか」と主催者が声をかけた。
「ぜひ。matplotlib と seaborn の使い方を教えてもらいたいんです」
若いエンジニアたちは、72歳の男性がこれほど最新の技術に詳しいことに驚いていた。
「VBAでDOMを操作する方法は知っていても、Pythonでデータを可視化する方法はまだ勉強中でね」と隆介は照れくさそうに笑った。
勉強会の途中、隆介は自分のラップトップで簡単なデータ可視化のコードを試していた。しかし、なぜかグラフが表示されない。
「あれ?おかしいな...」
隣に座っていた若いエンジニアが覗き込んだ。
「あ、ここでmatplotlib.pyplotをインポートしていますが、asで別名を付けていないですね。通常はimport matplotlib.pyplot as pltと書くんですよ」
「なるほど、そういうことか」隆介はコードを修正した。「ありがとう、助かった」
「いえいえ。それにしても、野村さんはすごいですね。私の祖父母は同じくらいの年齢ですが、スマートフォンの使い方で四苦八苦していますよ」
隆介は穏やかに微笑んだ。
「それはね、君のおじいさんやおばあさんは、別の分野で素晴らしい能力を持っているんだと思うよ。料理かもしれないし、園芸かもしれない。人それぞれ、挑戦する分野が違うだけさ」
勉強会の後、主催者が隆介に話しかけてきた。
「野村さん、もしよろしければ、次回の勉強会でVBAからPythonへの移行体験について話していただけませんか?多くの企業がそういう課題を抱えているんです」
「私のような素人が話して良いのでしょうか?」
「いえいえ、実践的な経験は何よりも価値があります。特に野村さんのように、長年VBAを使ってきた方がPythonに移行する過程でどんな苦労があったか、どう乗り越えたかは、多くの人の参考になるはずです」
隆介は少し考えてから、うなずいた。
「わかりました。つたない経験ですが、お役に立てるなら」
帰り道、隆介は空を見上げた。春の空は澄んでいて、星がきらきらと輝いていた。
「人生に遅すぎることなんてないな」
彼はつぶやいた。VBAで培った論理的思考とプログラミングの基礎は、新しい言語を学ぶ上で大きな財産となっていた。Pythonの豊富なライブラリ、データサイエンスの可能性、ウェブアプリケーション開発...まだまだ学ぶべきことは山積みだった。
***
「おじいちゃん、聞いてよ!」
数週間後、侃汰が興奮した様子で隆介の家を訪れた。
「どうしたんだい?そんなに嬉しそうで」
「学校のプロジェクト、最優秀賞をもらったんだ!」
「おお、おめでとう!」隆介は孫を抱きしめた。
「おじいちゃんのおかげだよ。あのカフェのデータ分析がすごく評価されたんだ。先生も『プロ級の分析だ』って言ってくれたよ」
「それは君の努力の成果だよ、侃汰」
「でもね、僕一人じゃできなかった。おじいちゃんと一緒に考えたアイデアがすごく役立ったんだ」
隆介は嬉しそうに微笑んだ。
「そうか。私も嬉しいよ。お互いに学び合えたということだね」
「そうだ、おじいちゃん。僕、決めたんだ」
「何をだい?」
「将来は、データサイエンティストになりたいって。おじいちゃんみたいに、好きなことに挑戦し続けられる人になりたい」
隆介は孫の決意に、胸が熱くなるのを感じた。
その夜、隆介は自宅で新しいプロジェクトを始めた。Flaskというフレームワークを使ったウェブアプリケーションの開発だ。侃汰のために、データ分析結果を簡単に共有できるウェブサイトを作ろうと考えたのだ。
「python
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')」
「ウェブアプリケーションか...これは面白そうだな」
VBAではできなかった新しい可能性が、目の前に広がっていた。隆介は、この新たな航海が自分をどこへ連れて行ってくれるのか、胸を躍らせながら想像した。
コードを書く指は、年齢を感じさせないほど機敏に動いていた。時々、関節がキリキリと音を立てることもあったが、それも挑戦の証だと隆介は笑った。
「やれやれ、古い船でも新しい海に漕ぎ出せるものだな」
隆介は画面に映る自分の姿を見て、苦笑いした。白髪交じりの頭、シワの刻まれた顔、老眼鏡...しかし、その目は若々しく輝いていた。
「プログラミングに年齢なんて関係ない。大切なのは好奇心と挑戦する心だ」
そして、彼はキーボードを叩き続けた。エラーが出ても、何度でも修正する。わからないことがあれば、本を開き、ネットで調べる。年齢は単なる数字に過ぎないと、彼は信じていた。
***
数か月後、隆介は自宅でオンライン会議に参加していた。画面には、全国各地のシニアプログラマーたちの顔が並んでいた。隆介が立ち上げた「シルバープログラマーズクラブ」の月例ミーティングだ。
「皆さん、今月のプロジェクト進捗はいかがですか?」
「私はJavaScriptの学習を始めました。孫とゲーム開発をする予定です」と、65歳のメンバーが報告した。
「素晴らしい!私は先月、初めてのPython製ウェブアプリをデプロイしました」と、70歳の女性が誇らしげに言った。
隆介は満足そうに会議を見渡した。様々な背景を持つシニアたちが、新しい技術に挑戦している。元教師、元会計士、元看護師...彼らは皆、第二の人生でプログラミングを学んでいた。
「挑戦に年齢は関係ないということを、私たちは証明しているんですね」と隆介は言った。
会議の後、侃汰が隆介の部屋をのぞきに来た。彼は大学受験を控え、忙しい日々を送っていた。
「おじいちゃん、調子はどう?」
「ああ、最高だよ」隆介は画面を指さした。「見てごらん、私たちのウェブサイトだ」
画面には、隆介が開発したウェブサイト「Silver Coders」が表示されていた。シニア向けのプログラミング学習リソース、オンラインコミュニティ、プロジェクト共有プラットフォームを提供するサイトだ。
「わぁ、すごい!これ、全部おじいちゃんが作ったの?」
「いや、仲間たちと一緒にね。私たちシルバープログラマーズクラブのメンバーで協力して作ったんだ」
侃汰は感心した様子で画面を見つめていた。
「おじいちゃん、本当にすごいよ」
「いやいや、すごいのは挑戦することの素晴らしさだよ。私たちは人生の新たな章を生きているんだ。新しいことを学び、新しい仲間と出会い、新しい価値を生み出す。これほど素晴らしいことがあるだろうか」
隆介は窓の外を見た。夕日が美しく空を染めていた。
「侃汰、覚えておくといい。人生は挑戦の連続だ。時には失敗し、時には挫折する。でも、諦めなければ、必ず新しい景色が見えてくる。それは、年齢に関係なく、すべての人に与えられた権利なんだ」
侃汰はうなずいた。
「それと、もう一つ大事なことがある」隆介は笑った。「挑戦するときは、楽しむことだ。苦しいことも、失敗も、すべて含めて楽しむ。そうすれば、人生はいつまでも冒険に満ちたものになる」
隆介の人生は、まだまだ終わらない。72歳からの新たな冒険が、今、豊かな実りを見せ始めていた。
「さあ、今日もコードを書こうか」
隆介はキーボードに手を伸ばした。彼の前には、無限の可能性が広がっていた。