Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Railsを深く理解すべきタイミング──「なんとなく」からの脱却

Railsのトピックの中に、どうしても意味が掴めないものはありませんか?

理解できているつもりでコードを書いたのに、まったく予想外の動作をしてしまった——そんな経験はないでしょうか。

あるいは、「本当はよく分かっていない」と自覚しながらも、その場しのぎで乗り切れてきた。ところがエッジケースとの格闘に膨大な時間を費やし、気づけば専門家になれるほどの時間を使っていた——そんなこともあるかもしれません。

しかし、そうならなくてもいいとしたらどうでしょう?目の前の問題について確かなメンタルモデルを持ち、正しい判断ができる。そして正しいコードが書ける。そんな状態を目指せるのです。

私自身の失敗談:セッションとの格闘

私がWeb開発を学び始めた頃、「セッション」はまさにそういう存在でした。なんとなく分かっているつもりだったのに、実はまったく理解していなかったのです。その誤解が原因でバグを連発し、周囲から何度も指摘されるほどでした。

そこで私は、セッションが実際にどう動いているのかをきちんと理解するために、時間をかけて学ぶ必要があると悟りました。謎を解き明かし、怖いものでも奇妙なものでもなくする。最終的には、その挙動を予測できるようになり——しかも、その予測が当たるように。

もちろん、「セッション」だけが深掘りの対象ではありません。データモデリング、キャッシュ、メタプログラミング。これらはすべて、なんとなく動く状態には簡単に到達できる一方、きちんと理解しないままでは終わりのないデバッグ地獄に陥りやすいテーマです。

著書『Practicing Rails』の中で、私はT字型学習(T-Shaped Learning)について書きました。幅広い基礎知識を持ちながら、必要に応じて特定のトピックへ深く踏み込んでいく学び方です。こうした深い踏み込みこそがディープダイブであり、プログラマとしてのキャリア全体を通じて、大きな問題を解決する力になってくれます。

いつディープダイブをすべきか?

では、どうすれば「そろそろ深掘りすべき時だ」と判断できるのでしょうか?

まず大前提として、ディープダイブをするには、何に潜るのかを知らなければなりません。

ディープダイブが最も効果を発揮するのは、単一のトピックに向き合っているときです。一言か短いフレーズで表現できる、具体的なテーマ。SQLクエリのパフォーマンスセッションHTTPキャッシュ。細かすぎると、トピックを複雑にしている要素同士の相互作用を見逃してしまいます。逆に広すぎると、「プログラミング全般」への深掘りになってしまい、それはキャリアをかけて取り組むべき課題になってしまうでしょう。

次に、以下の2つの状況のどちらかに当てはまるなら、深掘りのサインです。

  1. 自分では理解しているつもりなのに、まったく予想外のことが起きる。心の底では「この緑のボタンを押せば廊下の照明がつくはず」と分かっている。ところが押してみたら、部屋が崩壊した——そんな感覚です。

  2. 本当は理解できていないと分かっていて、それでも今までは問題なかった。しかし今、バグ修正をしようとしても、試すことすべてが新たな問題を生み、古いバグを直すのと同じ速さで新しいバグを作ってしまう。

この2つの状況に共通するのは、「自分が間違った方向に進んでいることに、ちょうど気づき始めた」という点です。巻き返せることを願いつつも、このまま足掻いても大量の時間を無駄にすることに気づき始めている。

どちらも、今のやり方がうまくいっていないことを、早い段階で察知するためのサインなのです。

だから次に、バグ修正のためにエッジケースと格闘して堂々巡りになったとき、あるいは自分が書いたコードが予想とまったく違う動作をして腰を抜かしたとき——そのとき感じた感情を思い出してください。その感覚に敏感になりましょう。立ち止まり、心を整え、今まさに「自分は理解していなかった」と気づいたそのテーマを、深く学ぶべきタイミングだという合図なのです。

とはいえ、ディープダイブが必要だと決めたものの、実際にはどう取り組めばいいのでしょうか?

  1. Rails5でのAngularの使用

    あなたは前にその話を聞いたことがあります。分散型で完全に機能するバックエンドAPIと、通常のツールセットで作成されたフロントエンドで実行されているアプリケーションがすでにあります。 次に、Angularに移動します。または、AngularをRailsプロジェクトと統合する方法を探しているだけかもしれません。これは、この方法を好むためです。私たちはあなたを責めません。 このようなアプローチを使用すると、両方の世界を活用して、たとえばRailsとAngularのどちらの機能を使用してフォーマットするかを決定できます。 構築するもの 心配する必要はありません。このチュートリアルは、この目的のた

  2. rack-mini-profilerとフレームグラフでRailsアプリのボトルネックを可視化する方法

    あなたのRailsアプリは遅くなっていませんか? 本来シンプルに表示されるはずのビューの読み込みに数秒かかるなら、原因を掘り下げて調査すべきサインです。 原因としては、データベースへの呼び出しが多すぎたり、処理の遅いメソッドがあったり、あるいは誰かがコードに仕込んだまま忘れられてしまった無駄なループだったりします。 アプリの遅さの原因を突き止めるためのツールは数多く存在します。以前このブログでもrbtraceについて紹介しましたし、New Relicのrpm gemもアプリの高速化に役立ってくれました。 しかし、私がパフォーマンス問題の調査に最も愛用しているツールは、それ以上のことができるので