LoginSignup
315
172

More than 1 year has passed since last update.

「取り返しのつかないことをしない」

Last updated at Posted at 2022-07-31

「取り返しのつかないことをしない」

昔、同僚と議論していて口走った言葉です。実はプログラマーとしてわりと重要な考えなのではないかと思います。

例: EC2のパブリックIPをスマホアプリに直書きする

スマホアプリ向けの静的ファイルやバックエンドAPIをAWSに実装した際、最初はスモールスタートだと言うことでEC2インスタンス1台の構成にしたところまではいいが、インスタンスに自動で割り当てられるIPアドレスをスマホ側で直接参照する実装にしてしまった。

こうなると、AWS側はアーキテクチャを変えるどころか、EC2インスタンスを再起動することすらできません(再起動するとIPアドレスが解放されてしまう)。スマホアプリをアップデートして、IPアドレスを直接参照するのを止められればいいのですが、一度公開したアプリを100%アップデートするのは事実上不可能です。

最初にRoute53でホスト名を解決するか、せめてEIPを使ってIPアドレスを再利用できるようにしていれば…

例: 大量のBashスクリプト

顧客向けの請求レポートを日次で作ることになりました。簡単な集計をしてメールを送るだけなので、sqlplusコマンドでSQLを実行し、sendmailコマンドを実行する、Bashスクリプトを書きました。顧客はせいぜい数社なので、受注するたびスクリプトをコピペで増やしていました。

数年後……そこには、千個を超えるバッチ処理スクリプトの群れが!しかも、顧客ごとに微妙にカスタマイズされており、1つとして同じものはありません(より正確には、同じものがあるのかどうかも分かりません)。

ところで、DBをオンプレのOracleから Amazon RDS for PostgreSQLに移すことになったのですが、一体どうすればいいのでしょう。

例: グローバル変数を使う

古典的&マイクロな話題としては、グローバル変数を使わない「取り返しのつかないことをしない」ためです。

一度使われたグローバル変数を廃止するのは、大抵コード全体の構造を変える必要が出てきて、困難な作業になります。

例: テストを書かない

テストが無いコードはレガシーコードだ!

テストがあれば、本体のコードが汚くても、比較的容易にリファクタリングすることができ、リグレッションの恐れもありません。逆にテストが無いと…。

また、実際のところ、最初からテストを書いて品質の良いコードを書いた方が最終的な開発効率は上がります。それどころか、テスト自動化の損益分岐点は4回であり、月1リリースでも半年で「初めからテストを書いた方が安上がりだった」状態に達することになります。

その他「取り返しがつかないこと」

  • Pythonの依存パッケージを管理していない。pipenv? pip? そんなの知らないよ、僕初心者だもん。
  • 1人プロジェクトだからとScalaでコードを書いたら、社内にScalaを書ける人がおらず、プロジェクトに縛り付けられた
  • バグを放置していたら、ユーザーが「バグを前提にした利用」をし始め、バグを直せなくなった
  • 小規模だからと IoC化せずAWSコンソール画面からリソースを作っていたら、全体像が分からなくなった。

「取り返しのつかないことをしない」とは

上で挙げた「取り返しのつかないこと」の例は、ちょっと時間を掛けて予習したり相談したりすれば、避けられた問題が多いようです。

なので、「取り返しのつかないことをしない」とは言い換えれば 「目先のコストを厭ったり、目先の利益を追ったりして、長期的な負債を抱えるなかれ」 ということなのかもしれません。

そして、「取り返しのつかないこと」を避けるのは、大抵、難しいことではなさそうです。

なんでこんな記事を書いたの?

お風呂に入ってボーッと今までの仕事のことを考えていたら、突然、この台詞を思い出しました。今となっては、どんなシチュエーションで誰に言ったのかも曖昧です。

315
172
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
315
172