TechTagetは「地球環境に配慮するコーディング」に関する記事を公開した。ソフトウェア開発者は、地球環境に配慮するさまざまなコーディング手法を使うことで、サステナビリティ(持続可能性)の取り組みをサポートすることができるという。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Excelon Developmentのマット・ホイッサー氏は2023年11月23日(米国時間)、TechTagetで「地球環境に配慮するコーディング」に関する記事を公開した。
企業のサーバルームからクラウドサービスプロバイダーの基盤となる大規模サーバファームに至るまで、世界中のデータセンターでアプリケーションが運用されている。こうしたアプリケーションの演算処理は全て、メモリへの書き込みなどのアクティビティーに大量の電力を消費し、大量の熱を放出する。
データセンターの運用担当者は、物理ハードウェアレベルや施設レベルで地球環境への配慮に率先的に取り組むことができる。一方、開発者やテスト担当者は、「グリーンコーディング」(地球環境に配慮するコーディング)によって貢献できる。
本稿では、サステナビリティ(持続可能性)を念頭に置いたソフトウェアプログラミング、グリーンコーディング手法について確認する。持続可能なアプローチのさまざまなメリットを開発に生かすことで、チームを巻き込み、開発に変化を起こせるという。
グリーンコーディングのベストプラクティスは、アーティファクトを減らすことから、CI/CD(継続的インテグレーション/継続的デリバリー)パイプラインのスリム化、太陽光発電によるコーディングに至るまで、多岐にわたる。
「npm」「HomeBrew」などのパッケージマネジャーを使ったことがあるなら、メジャーパッケージのインストールには多重のマイナーパッケージも必要になることを知っているだろう。それらのマイナーパッケージには依存関係がある。最善なのは、関係するアーティファクト(中間的な成果物)の数を制限することだ。
OSにも多種多様な要件がある。例えば、「Ubuntu」「Debian」を基盤とする人気のLinuxディストリビューション「Linux Mint」では、快適に動作するために100GBのディスク容量が推奨されている。これとは対照的に、「Docker」「Kubernetes」のコンテナ環境向けに「musl libc」と「BusyBox」を軸に構築されたLinuxディストリビューション「Alpine Linux」のイメージサイズは5MBだ。
使用するソフトウェアを検討することで、IT部門は経営層から与えられた目標に合わせて、必要となるディスク、メモリ、演算処理を減らすことができる。例えば、必要なことだけを行うように依存関係のリストを厳選する。そして、必要な依存関係だけを使ってバイナリをコンパイルする。
また、クラウドベースで仮想的なデプロイメントを検討することで、多くの仮想サーバを、共有された物理ハードウェアで運用できる。
開発したソフトウェアが使われる際に、どの程度の演算処理能力を利用すべきなのだろうか? 「利用可能な演算処理能力を全て使うようにソフトウェアを構築する」と考えるプログラマーもいる。このアプローチを採用すると、コンピューティングハードウェアが進化し、ソフトウェアを市場にリリースする時点で、あるいは運用環境に移す時点で、より高速に実行できるようになることが想定されている。「Trello」「Stack Overflow」などを設立したジョエル・スポルスキ氏は、2001年に「ブロートウェア」(肥大化ソフトウェア)という考え方を提唱している。
逆に、コンピュータサイエンスの学校では、メモリ消費量や「Big O」記法のようなトピックを教えている。Big O記法とは、アルゴリズムが使用する演算処理の量を計算する方法だ。Big O最適化では、リスト内の要素数やツリー構造の枝分かれ数が増加していくにつれて必要になる演算処理の増大を遅らせることを目指す。このBig O記法は見直す時期に来ているのかもしれない。
リーンソフトウェア開発の原則には「無駄の排除」があり、インターネット上では低解像度の写真を使用したり、照合する際にデータベースをインメモリキャッシュに移動したりといった消費電力への配慮も、その原則に含むことができるだろう。
開発とテストにSaaSツールを選択する方が、サーバにツールをインストールして運用するよりも効率が良くなるのが一般的だ。一方で、クラウドアプリを使うと、演算処理の肥大化に悩まされる可能性がある。
例えば最近のDevSecOpsツールの多くは、フル装備のテスト環境を作成し、コミットするたびに全ての自動チェックを実行する。DevSecOpsでは、セキュリティのフルスキャン、コード解析、複雑性分析、そしてクラウド内にデータベースを立ち上げることがある。チームがコードをマージすると、この全ての工程が最初からやり直しになることもある。一部のシステムは、おそらく数十の監視対象ブランチ上で遅延して実行され、自動的に再起動される。
また可観測性ツールによってあらゆるものを監視すると、演算処理が肥大化し、ネットワークが飽和状態になる可能性がある。例えば、全てのテストに対して可観測性ツールをアクティブにするシナリオを考えてみよう。可観測性ツールは、ネットワークトラフィックが発生するたびに「どの情報がどこに送信されるか」を示すメッセージをサーバに送信する。これによってテストトラフィックは事実上、倍増する。その結果、事実上無駄なエネルギーが消費される。その上、テストサーバの実行が遅くなり、ほとんどメリットは得られない。最悪の場合、運用サーバにも影響し、運用が停止する恐れもある。
「開発とテストのパイプラインでどの程度のアクティビティーが行われるのか」を正確に監査することで、演算処理の削減と電力消費量の低下の両方が得られる可能性がある。例えば「開発チームが、ビルドプロセスではクラウドネイティブのコンテナイメージを作成し、初期テストはローカルのノートPCで行う」といったこともできるだろう。
モノリシックなシステムにすると、ビルドのたびに、コストのかかる回帰テストプロセスが必要になる可能性がある。そのプロセスを完全に自動化したとしても、ビルドと自動チェックプロセスの大半は冗長になり、ビルドのたびに以前と同じことがやり直されることになる。マイクロサービスにすれば、コードの1つのセクションだけを一度に変更、テスト、デプロイ、監視できる可能性がある。
他にも最近のアプローチとして、PHPなどの言語を使えば、1つのWebページへのコードデプロイを一度に行える。PHPなどのインタープリタ言語を利用し、コードをコンパイルして、CPUとメモリの使用量を減らして実行する小さなファイルを作成するツールもある。
一般に、CDのアプローチを採用する場合、コードのコミットからデプロイメントまでの間に3〜4日のサイクルタイムが発生するのが実情だ。この遅れは、人的要因や冗長な演算処理によって発生する可能性が高い。CI/CDパイプラインを分析することで、こうした時間を減らし、冗長な演算処理を削減することができる。
ここまでの考え方は、コーディング、開発、テストでの実践方法に注目してきた。だが、運用チームでも同様の考え方で変化をもたらすことができるだろう。
グリーンコーディングでは、主にソフトウェアの設計と運用に目を向けている。開発者もテスト担当者も、各々が地球環境に配慮した行動をとれる。経営者も同様だ。例えば、地球環境に配慮する車両を利用するだけでなく、通勤時間を短くしたり、通勤時間をなくしたりすることで、車両からの排出ガスを削減できる。太陽光発電や風力発電のような再生可能エネルギーは、家庭でも企業でも利用できる。企業は、こうした再生可能エネルギーを利用する従業員に奨励金を出すこともできる。多くの政府は、企業レベルや個人レベルでの持続可能性の取り組みに対して、税制上の優遇措置や報奨金などの制度を設けている。
グリーンコーディング実践の大きなメリットの一つは、グローバルでもローカルでも着手できる点にある。開発者は、個人として、システムやコードのフットプリントを減らす方法についてブレインストーミングすることができる。開発チームとしては、CI/CDパイプラインの見直しやアーキテクチャ上のベストプラクティスの検討に取り組むことができる。
必要なのは、誰かがこの取り組みを始めることだけだ。CI/CDパイプラインの変更、コーディングプラクティスの分析、コンテナの追加、マイクロサービスへのリファクタリングは全てソフトウェア開発チームの管理下にある。
また、地球環境に配慮するアーキテクチャにするためのアイデアは、取り組むには規模が大きくなるので、上層部の手に委ねる。グリーンコーディングについて賛同を得るには、次のような業務上のメリットを強調するといいだろう。
グリーンコーディングに取り組めば、エネルギー消費量が減少する。エネルギー消費量の削減を重視することで、ネットワークも簡素化、縮小され、テスト環境の無駄な利用も抑制できる。このような変化によって、コンピューティング費用が削減される。
プログラマーは、プロトタイピング中やブレインストーミング中に迅速かつ創造的に作業することを重視するようになるかもしれない。ただし、チームが言語やコード設計の選択を終えたら、メモリ、CPU、ディスクの使用量に注意したいところだ。使用量を抑えれば、エネルギーが節約され、ソフトウェアエンジニアリングの向上につながる。
地球環境に配慮することは従業員にもメリットをもたらす。開発者は、「演算処理が肥大化することがあまりないエレガントなシステムをビルドし、クラウド技術をうまく活用したい」と考えるようになる。グリーンコーディングの実践に役立つかどうかに関係なく、従業員は「テレワークを活用しよう」と考えるようになるかもしれない。
Copyright © ITmedia, Inc. All Rights Reserved.