はじめに
都知事選の安野候補、ポスターの貼り方と髪型・服装とYAMLファイルの書き方だけひたすら批判されている前代未聞の都知事候補となっている(※2024/6/26時点)
現職知事が公約未達や経歴詐称疑惑等で批判されている一方でこれはちょっと面白すぎる。
そんなにダメなの?現職が8年も在任していたのに公約の花粉症撲滅を実現しなかったことより悪いことなの?
あらゆる人の意見を爆速でキャッチアップし、リファクタリングしていて本当に凄い。現職には、花粉症もこのスピード感で撲滅してほしかった。
私はエンジニアでもプログラマでもないので、なぜ安野候補が批判されているのか分からなかった。しかし、「YAMLの中にpython書きすぎだったから」が都知事選の勝敗を分けるかもしれないので、個人の勉強と備忘録として「YAMLの中にpythonのコードを書きまくるのが何故ダメなのか」をまとめる。
YAMLとはそもそも何か
YAML(YAML Ain’t Markup Language)は、データの直感的かつ人間が読みやすい形式で記述するためのデータ序列化形式である。以下に、YAMLの特徴と用途を説明する。
⚫︎特徴
- 人間が読みやすい:
YAMLはシンプルで、インデントによって構造が決まるため、読みやすく理解しやすい。 - 階層構造:
インデントを使用してデータの階層構造を表現する。これにより、複雑なデータ構造も直感的に記述できる。 - 柔軟なデータ形式:
YAMLはリスト、マップ、スカラー(文字列、数値、ブール値など)のデータ形式をサポートしている。 - コメントサポート:
YAMLはコメントをサポートしているため、データの意味や用途についての注釈を追加できる。 - 非依存性:
YAMLは特定のプログラミング言語に依存せず、さまざまな言語でサポートされている。
⚫︎用途
- 設定ファイル:
• YAMLは設定ファイルとして広く使用される。例えば、アプリケーションの設定、サーバー構成、CI/CDパイプラインの設定など。 - データ交換:
• YAMLはデータ交換フォーマットとしても利用される。APIレスポンスやデータのインポート/エクスポートなどで使われる。 - インフラストラクチャ定義:
• YAMLはインフラストラクチャの構成管理ツール(例:Ansible、Kubernetes)で広く使用される。 - ドキュメントテンプレート:
• データテンプレートやドキュメントテンプレートの定義にも使用される。
YAMLは大層便利らしいということがわかった。
YAMLをPythonで書くのはダメなのか
YAML(YAML Ain’t Markup Language)は特定のプログラミング言語に依存しないデータ序列化形式で、さまざまな言語で使用されている。
- Python:
PythonはYAMLとの相性が非常に良く、構成ファイルや設定ファイルにYAMLがよく使われる。ライブラリとしてはPyYAMLが広く利用されている。 - Ruby:
• RubyでもYAMLはよく使用される。Ruby on Railsの設定ファイルや、他のRubyプロジェクトでもYAMLがよく使われる。 - JavaScript/Node.js:
• JavaScriptやNode.jsのプロジェクトでもYAMLが使われる。js-yamlというライブラリが一般的。 - Go:
• Go言語でも設定ファイルとしてYAMLが使われる。go-yamlというライブラリが利用される。
「YAMLにPythonコードを書く」自体は特に批判の対象にはならないようである。
筆者はRとPythonくらいしか触ったことがないド文系非エンジニアなので、世の中未知ライブラリが無限にあるな〜!とテンションが上がった。
YAMLにpythonコードを書きまくるのはダメなのか
YAMLの設定ファイルにPythonコードを書き込むのが推奨されない理由は複数ある。
- セキュリティの問題:
YAMLファイルに埋め込まれたコードが実行されると、任意のコードが実行される可能性がある。これにより、意図しない動作やセキュリティリスクが発生する可能性がある。 - 可読性の低下:
設定ファイルは一般的に人間が読みやすく、理解しやすい形式であることが求められる。YAMLはそのために設計されていますが、コードが混在すると、可読性が大幅に低下し、設定内容の理解や変更が難しくなる。 - 保守性の問題:
設定ファイルは通常、環境や設定を簡単に変更できるようにするためのものである。コードが含まれていると、変更が複雑になり、エラーが発生しやすくなる。特に、設定とロジックが混在すると、どこを変更すればよいかが明確でなくなる。 - 分離の原則:
設定とコードは役割が異なるため、分離して管理すべき。設定ファイルは環境や設定の変更を簡単に行えるようにするためのものであり、コードはアプリケーションのロジックを記述するためのものである。これらを分離することで、各部分の管理と保守が容易になる。 - パーサーの複雑化:
YAMLパーサーは設定データを読み取るためのものであり、コードの実行機能を持たせると複雑化する。これは、パーサーのバグや脆弱性を増やす原因となる。
このような理由から、YAML設定ファイルにはコードを埋め込まず、設定とコードを明確に分離することが推奨される。
安野候補の選挙戦以降の予定は不明だが、今回の選挙戦以降も本件のYAMLファイルが継続使用されるならば、メンテのしやすさや可読性等は重要である。
よって、「政治的な争点とはズレた瑣末なことでは?」と思っていたが、「重箱の隅をつつく」系のイチャモン等ではないバキバキに合理的な指摘であった。
確かに、気骨あるエンジニアであるならば、「AIエンジニア」という経歴を前面に押し出している候補者に対してはツッコミたくなるのは至極当然である。
わかりやすく説明してくれている方がいたよ
「YAMLの中にPython書きまくるような奴を絶対に都知事にしてはいけない」か?
「YAMLの中にPython書きまくるのはダメ」は至極真っ当で合理的な指摘であることがわかったが、「YAMLの中にPython書きまくるような奴を絶対に都知事にしてはいけない」については別途検証する必要があると思う。私個人としては下記のように考える。
⚫︎技術的背景と政治的役割の違い
- 技術的な判断と政治的判断の違い:
YAMLファイルにPythonコードをゴリゴリに書くという行為は技術的に不適切とされる。しかし、都知事の役割は主に政治的、行政的な判断を行うことであり、技術的な詳細に対する理解や判断が直接求められるわけではない。 - 専門知識の範囲:
都知事には広範な政策領域での意思決定能力が求められる。技術的な専門知識が一部欠けていることが直接的に都知事としての資質に影響するとは限らない。重要なのは、必要な専門知識を持つアドバイザーやチームを適切に活用できるかどうかである。都知事は別に、全知全能の神でなくて全然良いと思う。
⚫︎倫理と判断力
- 倫理的な判断力:
YAMLにPythonを書くような技術的な間違いは、倫理的な判断力や実行力等とは特に相関はないはずである。都知事には、その辺の生身の人間ひとりひとりの生活を第一に考え、公正で透明な政策を推進する倫理的な判断力が求められる。 - 問題解決能力:
技術的なミスを犯すことはあっても、それを修正し改善する能力や、適切な人材を任命する能力の方が重要である。問題解決能力が高ければ、技術的なミスは特に致命的な欠陥ではないと思う。そのためのプルリク機能だし「すぐできることはすぐにやる💪」の姿勢が大切だと思う。
⚫︎チームワークとビジョン
- チームワークとビジョン:
都知事は多くの専門家や行政スタッフと協力して政策を実施する職務である。技術的な詳細に関する知識が不足していても、強力なチームをビジョン構築し、適切なアドバイザーの助言を受け入れる柔軟性と実行力があれば、効果的に職務を遂行できるはずである。
(※リーダーシップも都知事に問われる資質として重要そうですが、私自身がリーダーシップの素質も知見もなすぎて何もコメントできないので、MECEを捨ててパスします。)
⚫︎結論
技術的なスキルは重要だが、都知事としての適性を判断する際には、倫理的な判断力、問題解決能力、そしてビジョン等がより重要な要素となる。したがって、「YAMLファイルにPythonコードをゴリゴリ書く」ような技術的な誤りがあったからといって、その人物が都知事に適さないと即断することは適切ではないと思う。
SNSにおいては強い言葉を使った方がウケる(ように見える)が、それとは別に、「未来の希望は自分で手を動かしてつくってナンボでしょ🫶」と思っている一般市民としては、本当に大事なことは何なのかはちゃんと考えていきたい。
感想
私自身はつよつよプログラミングマンではないので、for文すら上手く書けなくて20個同じコードを書くこともあるし、キモい変数名を付けて自分で訳がわからなくなったり、発狂・横着して汚いPythonコードを書いたりすることはよくある。chatGPTにコードレビューはしてもらえるが、職業エンジニアでもないので他人のコードを見る機会もatcoderくらいしかなく寂しいものである。なので、今回Githubやプルリク文化を知り、良いな〜!楽しそうだな〜!と思った。
このレベルの人とそのチームのムーブをリアルタイムで、しかも無料でウォッチできるの楽しすぎるし、しかもそれが都知事選なのが面白すぎる。都知事選、みんなでいきましょう🗳️
最後までお読みいただき、ありがとうございました。
2024/7/4追記
公式からの解説記事がリリースされてワロタ