20241224
この一ヶ月は興味深い経験ができた。
最初は余興のつもりで作り始めたRailsのアプリケーションだった。
普段はクローズドで完全に自分のために作っているアプリケーションが多いが、今回は人のために作ったアプリケーションだった。
今の状況は少しややこしいので明言しないものの、もし自分が例えば好きなように個人開発できたらどうなるのかを経験する貴重な機会を得ることができた。
私は自分の好きなこと、あるいは自分が興味のある分野であればプログラミングは難しくないと考えていた。
例えばゲーム開発なんかに挑戦するとその気持ちは一瞬でなくなるのだが、要はそのようなことが起こった。
画面のコンセプトはExcalidrawというWebアプリケーションから始めて、完全スクラッチでRails 7のアプリケーションに着手した。
最初の一週間は一気に200コミットくらい一気に作れた。
しかしそれ以降はモック画面を実際の動く画面へ落とし込んでいく段階の単純作業が間に合わなかった。
そして最初のリリース目標に到達できずにその日はデプロイできずに終わった。
それ以降は間に合わなかったアプリケーションは失敗作として捨ててもよかったのだが、今回はせっかく時間もあるし、リリースの目標を伸ばしてでも最後まで作り切るということを念頭にしたかった。
たびたび話題に出しているGoやRustなどの新しい言語を学習する時間にも割けただろう。1
しかしそういった学習よりも、何かを最後まで作り切るというのはきわめてもっと個人に属するタスクである。
YouTubeなどを見るとそんな最後までやりきった素晴らしいなにかに溢れているのでつい錯覚しがちであるが、何かを完成させるというのは誰しもそんなにできるものでもない。
今回のように自分が最も得意とするはずである技術を使って、好きに何かを作ったとしても、どこかしかのタイミングでなんらかの制約が発生し、それが集中の阻害になる。
そしてそのプロジェクトに向き合うのが億劫になり、やめてしまう。
私はそういった失敗がこれまでずっと常につきまとっていて、自分のポートフォリオも満足に公開できないくらい最後まで何かをやり切るといった経験をえられなかった。
もし学生の頃に始めてPCに触れた頃や、あるいはRailsを覚えた頃にもどってあのプロジェクトを最後まで続けられていたら。
クローズドソースで今も無数のアプリケーションの残骸は残っているが、最近は昔と比べると一通り動くものまで作れるようにはなった気がする。
それでもそれらはそもそも公開をするつもりもなければ、現在も動作するものもあるはずだが最初から作り直すのが早いと感じてしまうので十把一絡げに未完成として扱っている。
もちろん昨今のコード生成AIにもかなり助けられているが、一番はやはり白紙にしていく作業を繰り返しながらもじっくりとRailsやそれらに付随する技術への造詣からだと思う。
そういう意味では今回誰かに向けて作るという意味ではおそらく初なのである。
かつてこうして続けてきたブログの記事も私にとっては立派な作品といえなくもないのだが、ブログは作品というよりも記録なので立ち位置は曖昧である。
今回は普段私が構築しているプライベートクラウドではなく、Digital OceanのVPSにわざわざドメインまで取得した。
公開することを目標にするのだから、ドメインと静的なサイトを作っておしまいではない。
正直このアプリケーションは今後どうメンテされていくのかは全く検討がつかない。
はっきりいって細かい部分はまだ直す余地も多いし、誰から見ても完成しているとはならないかもしれない。
実装した機能も個々にこだわりはあるが、最低限ではある。
しかし一度役目を終えてしまえばVPSを破棄して、あとは適当にHTMLを返すだけにする未来も正直見えている。2
それでも見せる相手が明確に存在するものを作れたというのは自分の中で一定のマイルストーンを成し遂げたという達成感はある。
作っていくなかでトラブルもあった。
先述した技術的制約で今回もっとも大きかったのはデータベースの設計に関することである。3
特にhas_one
の挙動が私の想定とは異なっていたので、根底から作り直す必要性も正直感じた。
だけどいつもならまた白紙に戻して一歩ずつ進むのをぐっとこらえて、同じアプリケーションをずっと扱ったのだ。
それができたのはRSpecでテスト駆動開発を実感できたからだし、普段はあまり書かないE2Eのシステムテストも挑戦できた。
ただ90%まで進めたものを最後の100%までにする10%の作業は90%と同等か、それ以上に時間がかかると思う。
結果的には1ヶ月で終わることができたが、2/3はほとんど微調整に費やしている。
もちろん微調整といえど、Gitのコミット履歴は最初の頃と同じくらいの修正量だった。
だからこそもっと簡単に自分の得意なことでアプリケーションを量産できる自信があったが、それはやはり白紙に戻せる前提なのだと気づいた。
もう少し若い時分にもっとこれらのことを意識できたのであればまた違ったキャリアが見えてくるのかなとも思う一方、今こうして不自由なく生きていられるだけでよいと思える自分もいる。
あとはほぼ寝食、開発に時間を費やすことができてもうまく実装ができない時間は必ずしも集中できるとは限らなかった。
いうなればこの時間が最も辛かった。
頭の中では少しでも多く作業がしたいと感じているのに、なにかの阻害がコードかあるいは不具合などで進まない。
そうしてしまうとYouTubeや別の作業に逃げてしまう。
これは普段仕事していても同様に感じることだけれども、必ずしも趣味に全振りできたとしても同様に発生するのだということだ。4
自分の集中力のなさを恥じることは度々あったが、それは結局モチベーションそのものよりは対象に対する理解度が足りないだけなのかもしれない。
そしてそれらを補う方法のひとつが日々の練習であったり、白紙にもどしながらでも何かを作り続けていくことなのだろう。
実際私が今日までRubyやRailsを続けられているのはそれが大きいとは思う。
なんにせよ私は今回やりきったという実感が大事なのである。
私の見積もりではこれらの作業は「遅くとも」1週間ほど前に終えられる予定だった。
こうして自分のなかで満足する出来にするのに2度も延期が発生していることに気づく。
とはいえ今年もまだ1週間残っているのは幸いだったと思う。
そして新年を迎えて三が日があけて週があけるまで2週間くらいは残っている計算だ。
次にやりたいことも決めている。
Rails 7で満足いくまで作れたので、今後はRails 8を試してみるつもりだ。
部屋もこの一ヶ月の間に掃除できた。
このあたりの話題はまた別に書くとして、ひとつの大きな達成感を得られたことを記録としてここに残しておきたい。