番外編 #1 なぜ「標準」に従うのか - Python OSS開発記録
python 17 min read

番外編 #1 なぜ「標準」に従うのか - Python OSS開発記録

avatar-m-1

karrinn

著者

このOSS開発記録シリーズでは、Git Flow、GitHub Rulesets、Conventional Commitsなど、さまざまな「標準的な手法」を採用しています。
なぜ、わざわざ世界標準に従うのか。番外編として、その理由をお話しします。

KEY TAKEAWAYS

この記事でわかること

  • 「標準」に集約された圧倒的な経験値の価値
  • 独自ルールが生み出す見えないコスト
  • 新しいメンバーが力を発揮できる環境とは

用語の定義

TERM 01

標準・ベストプラクティス

世界中の開発者コミュニティで広く採用され、長年の実践を通じて有効性が確認された手法やルール。Git Flow、Semantic Versioning、Conventional Commitsなど。

TERM 02

独自ルール

特定の組織やチーム内でのみ通用するルールや慣習。標準と異なる命名規則、独自のワークフロー、社内限定の用語など。

TERM 03

オンボーディングコスト

新しいメンバーがチームで生産的に働けるようになるまでに必要な時間と労力。独自ルールが多いほど、このコストは増大する。

TERM 04

コンテキストスイッチ

異なるプロジェクト間で作業を切り替える際の認知的負荷。標準に従っていれば、プロジェクトが変わっても同じ知識が使える。

「標準」に集約された経験の価値

世界標準やベストプラクティスと呼ばれるものには、膨大な時間と人数による開発経験が集約されています。

Git Flowは2010年に提唱されて以来、世界中の何百万というプロジェクトで使われてきました。Conventional Commitsは、コミットメッセージの書き方について数え切れないほどの議論を経て生まれました。

標準が「標準」になった理由

標準的な手法は、単に「多くの人が使っているから」標準なのではありません。

時間の試練

何年もの実運用を経て、エッジケースや問題点が洗い出され、改善されてきた

多様な視点

異なるバックグラウンドを持つ開発者たちの知見が反映されている

ツールの充実

標準に準拠したツールやサービスが豊富に存在し、エコシステムが整っている

つまり

標準は「例外的なケースにも対応できるから標準になっている」のです。最初から完璧だったわけではなく、無数の試行錯誤と改善を経て今の形になっています。

独自ルールが生み出す見えないコスト

「うちの会社ではこうやっている」「このチームではこのルールで」。
こうした独自ルールには、一見すると見えにくいコストが潜んでいます。

独自ルールがもたらす問題

新規参入者の学習コスト

標準を知っている人でも、独自ルールを一から覚え直す必要がある

「コミットメッセージは社員番号から始めてください」
「ブランチ名は案件管理番号_担当者イニシャル_連番です」
「本番リリースは必ずExcelの申請書を印刷して...」

知識の再利用ができない

プロジェクトが変わるたびに「このチームのルール」を覚え直し

前のプロジェクトで身につけた知識が、次のプロジェクトで活かせない

情報検索が難しい

独自ルールに関する情報はインターネット上に存在しない

問題が起きても「ググって解決」ができず、詳しい人に聞くしかない

ツールとの連携が困難

標準に準拠したツールがそのまま使えない

設定をカスタマイズしたり、独自ツールを作る必要が出てくる

実際にあった独自ルールの例

Git/コード管理

  • コミットメッセージは日本語で、です・ます調で
  • マージは必ず○○さんがやります。他の人はpush禁止
  • クラス名の先頭には必ず部署コード(3桁)をつける

環境/ツール

  • Dockerは禁止。仮想マシンのみ許可
  • クラウドは禁止。オンプレのみ
  • VS Codeは禁止、社内承認済みのエディタのみ
  • ステージング環境は○○部長の許可がないと使えません

申請/承認

  • npmパッケージは事前にセキュリティ部門の審査を
  • コードレビューは直属の上司のみ可(技術わからない人がレビュー...)

コミュニケーション

  • Slackのメッセージには必ず宛先(To: ○○さん)を
  • チャットでの報告は禁止、必ずメールで(マナーを理由に)
  • バグ報告はGitHub Issueではなく、社内Redmineに

...心当たり、ありませんか?

よくある状況

「この独自ルール、なんでこうなったんですか?」
「昔からこうだから...」「最初に決めた人がもういないから分からない」

独自ルールは時間が経つとなぜそうなったのかが分からなくなることも多いです。

本当の新人さんの辛さ

さらに辛いのは、経験の浅い新人さんの場合。

「これは世間一般の常識なのか、この会社だけのルールなのか」が判断できないのです。

標準なら「知らなくて当然、調べればわかる」。でも独自ルールは「聞かないとわからない」。
その区別がつかないから、「質問していいのかどうか」を調べるという本末転倒な状況に陥ることも。

「こんなことも知らないの?」と思われたくない。でも聞かないと進めない。
この心理的負担は、想像以上に新人さんを萎縮させます。

新しいメンバーが力を発揮できる環境

標準に従うことの大きなメリットの一つは、新しいメンバーがすぐに力を発揮できることです。

標準を使う = 即戦力が活きる

経験豊富なエンジニアを採用しても、独自ルールばかりのプロジェクトでは...

フェーズ独自ルールが多いプロジェクト標準に従ったプロジェクト
初日「まずうちのルールを覚えてね」「Git Flowだから分かるよね」
1週間後まだルールを覚えている途中すでにコードを書き始めている
1ヶ月後ようやく独自ルールに慣れてきたチームに貢献している
困ったとき詳しい人に聞くしかないドキュメントやStack Overflowで解決

せっかく優秀な人が入ってきても、独自ルールの学習に時間を取られるのはもったいないことです。
その人が持っている知識や経験を、すぐにプロジェクトに活かせる環境を作る方が、チーム全体の生産性は上がります。

考えてみてください

10年の経験があるエンジニアが入社して、最初の1ヶ月を「この会社独自のルールを覚える」ことに費やす。
それって、本当にその人の能力を活かせているでしょうか?

「そうは言っても...」への回答

ここまで読んで「いや、うちは事情があって...」と思った方もいると思います。

わかります。私もそれなりの規模の企業でエンジニアをやってきたので、いろんな制約があることは身をもって知っています。レガシーシステムとの兼ね合い、セキュリティポリシー、部署間の調整、「今さら変えられない」という空気。全部経験してきました。

お願いしたいこと

ただ、一つだけお願いがあります。

「標準でできないか」を一度は検討してほしいのです。

「うちは特殊だから」と思っていたことが、実は標準の範囲内で対応できることも多い。
だって標準は、世界中のありとあらゆるケースを経験してきた人たちが作ってきたものだから。
「こういう例外ケースがあるんだけど」→「それ、こうすれば対応できるよ」というのが大体用意されています。

それでも本当にダメなら、仕方ない。でも「なぜ標準から外れるのか」は明文化しておいてください。
そうしないと、数年後に「なんでこうなってるんだっけ?」になります。必ず。

標準から外れる範囲は、できるだけ小さく。
全部が独自ルールになるのと、一部だけ独自ルールなのでは、新人さんの負担が全然違います。

wagtail-reusable-blocksでやっていること

このシリーズで題材にしているwagtail-reusable-blocksでは、ほぼ全部、世界標準をそのまま使っています

独自に決めたことは、ほとんどありません。「どうするか迷ったら、みんながやってる方法でいく」。それだけです。

実際に使っている標準

何をどの標準で解説
ブランチ戦略Git Flow#4
ブランチ保護GitHub Rulesets#5, #6
バージョン番号Semantic Versioning#11
ライセンスBSD-3-Clause#21
パッケージ設定pyproject.toml (PEP 517/518)#11
コード品質Ruff + mypy#18
コミュニティファイルGitHub標準形式#3

初めてこのリポジトリを見た人でも、Git FlowやSemVerを知っていれば「あ、これね」で終わり。
説明する側も楽だし、覚える側も楽。みんな楽

OSSなので世界中の誰でも参加できます。日本語が読めなくても、Git FlowとSemVerがわかれば作業できる。
これ、標準に乗ってるからできることです。

結局のところ

「標準に従う」って、なんか窮屈に聞こえるかもしれません。
でも実際は逆で、標準に乗ると楽になるんです。

「ブランチ名どうしよう」「コミットメッセージの書き方どうしよう」みたいな、どうでもいいけど決めないといけないことって山ほどあります。

これを毎回議論してたら、いつまでたってもコード書けない。
「Git Flowでいこう」「SemVerでいこう」で終わりにすれば、その分の時間と頭のリソースを、本当に考えるべきことに使えます。

標準に乗るっていうのは、「決めなくていいことを決めなくて済む」ようにすること。
それって、自由になることなんですよね。

Git Flowを知ってれば、Git Flowを使ってるプロジェクトならどこでもすぐ動ける。
独自ルールの知識は、その会社でしか使えない。
どっちが自分のキャリアにとっていいかは、言うまでもないですよね。

ちょっと踏み込んだ話

ここからは少し踏み込んだ話をします。読みたくない人は飛ばしてください。

誰が意思決定しているか

独自ルールがはびこる組織には、ある傾向があります。

「社内ルールに詳しい人」が、技術的な意思決定権を持っているケースです。

口が達者で、自分を実際より優秀に見せるのがうまい。社内政治にも長けている。
でもその「詳しさ」は、社内のローカルルールに対するもので、世界標準の知識じゃない。
Git FlowもSemVerも知らないけど、「うちの会社のやり方」は完璧に把握している。

こういう人が意思決定すると、どうなるか。
「自分が詳しいやり方」を採用するんです。当然ですよね。
結果、独自ルールがさらに増え、標準を知っている人が力を発揮できなくなり、システムは遅くなり、コストは上がる。

見分け方のヒント

「なんでこのやり方なんですか?」と聞いたとき、
「業界標準だから」「このツールがこう設計されてるから」と答える人は、標準を理解している。
「昔からこうだから」「うちではこうやってきたから」と答える人は、要注意。

若手の皆さんへ。
上司が本当に技術を理解しているのか、それとも社内ルールに詳しいだけなのか。
その見極めは、自分のキャリアを守るためにも大事です。

上司・マネージャーの皆さんへ。
部下の中に「標準を知っている人」がいたら、その人の意見をちゃんと聞いてください。
「うちのやり方と違う」で片付けず、なぜその標準が存在するのかを一緒に考えてほしい。

最後に

長々と書きましたが、言いたいことはシンプルです。

迷ったら、世界標準に乗っておけ。

世界中の人たちが何年もかけて「これがいい」と辿り着いた答えを、わざわざ独自に作り直す必要はありません。
その労力は、もっと価値のあることに使った方がいい。

そして何より、次に入ってくる人のことを考えてほしい
その人が「これ常識?独自ルール?聞いていいの?」で悩まなくて済む環境を作ること。
それが、チームとして健全な状態だと思います。

このシリーズの各記事では、Git Flow、GitHub Rulesets、SemVerなど、それぞれの標準について詳しく解説しています。
「なんでこの標準を使うのか」「どう設定するのか」を知りたい方は、ぜひ読んでみてください。

参考リンク

このシリーズで採用している標準

標準化・ベストプラクティスについて

関連トピック

コメント (0)

まだコメントはありません。最初のコメントを残しませんか?

コメントを投稿

メールアドレスが公開されることはありません。必須項目には * が付いています