検索
ニュース

地球環境に配慮する「グリーンコーディング」とは? 6つのベストプラクティスと始め方運用担当者だけでなく開発者も貢献するには

TechTagetは「地球環境に配慮するコーディング」に関する記事を公開した。ソフトウェア開発者は、地球環境に配慮するさまざまなコーディング手法を使うことで、サステナビリティ(持続可能性)の取り組みをサポートすることができるという。

Share
Tweet
LINE
Hatena

 Excelon Developmentのマット・ホイッサー氏は2023年11月23日(米国時間)、TechTagetで「地球環境に配慮するコーディング」に関する記事を公開した。

 企業のサーバルームからクラウドサービスプロバイダーの基盤となる大規模サーバファームに至るまで、世界中のデータセンターでアプリケーションが運用されている。こうしたアプリケーションの演算処理は全て、メモリへの書き込みなどのアクティビティーに大量の電力を消費し、大量の熱を放出する。

 データセンターの運用担当者は、物理ハードウェアレベルや施設レベルで地球環境への配慮に率先的に取り組むことができる。一方、開発者やテスト担当者は、「グリーンコーディング」(地球環境に配慮するコーディング)によって貢献できる。

 本稿では、サステナビリティ(持続可能性)を念頭に置いたソフトウェアプログラミング、グリーンコーディング手法について確認する。持続可能なアプローチのさまざまなメリットを開発に生かすことで、チームを巻き込み、開発に変化を起こせるという。

地球環境に配慮するコーディング、6つのベストプラクティス

 グリーンコーディングのベストプラクティスは、アーティファクトを減らすことから、CI/CD(継続的インテグレーション/継続的デリバリー)パイプラインのスリム化、太陽光発電によるコーディングに至るまで、多岐にわたる。

1.アーティファクトを最小限に抑える

 「npm」「HomeBrew」などのパッケージマネジャーを使ったことがあるなら、メジャーパッケージのインストールには多重のマイナーパッケージも必要になることを知っているだろう。それらのマイナーパッケージには依存関係がある。最善なのは、関係するアーティファクト(中間的な成果物)の数を制限することだ。

 OSにも多種多様な要件がある。例えば、「Ubuntu」「Debian」を基盤とする人気のLinuxディストリビューション「Linux Mint」では、快適に動作するために100GBのディスク容量が推奨されている。これとは対照的に、「Docker」「Kubernetes」のコンテナ環境向けに「musl libc」と「BusyBox」を軸に構築されたLinuxディストリビューション「Alpine Linux」のイメージサイズは5MBだ。

 使用するソフトウェアを検討することで、IT部門は経営層から与えられた目標に合わせて、必要となるディスク、メモリ、演算処理を減らすことができる。例えば、必要なことだけを行うように依存関係のリストを厳選する。そして、必要な依存関係だけを使ってバイナリをコンパイルする。

 また、クラウドベースで仮想的なデプロイメントを検討することで、多くの仮想サーバを、共有された物理ハードウェアで運用できる。

2.リーンソフトウェア開発の原則に従う

 開発したソフトウェアが使われる際に、どの程度の演算処理能力を利用すべきなのだろうか? 「利用可能な演算処理能力を全て使うようにソフトウェアを構築する」と考えるプログラマーもいる。このアプローチを採用すると、コンピューティングハードウェアが進化し、ソフトウェアを市場にリリースする時点で、あるいは運用環境に移す時点で、より高速に実行できるようになることが想定されている。「Trello」「Stack Overflow」などを設立したジョエル・スポルスキ氏は、2001年に「ブロートウェア」(肥大化ソフトウェア)という考え方を提唱している。

 逆に、コンピュータサイエンスの学校では、メモリ消費量や「Big O」記法のようなトピックを教えている。Big O記法とは、アルゴリズムが使用する演算処理の量を計算する方法だ。Big O最適化では、リスト内の要素数やツリー構造の枝分かれ数が増加していくにつれて必要になる演算処理の増大を遅らせることを目指す。このBig O記法は見直す時期に来ているのかもしれない。

 リーンソフトウェア開発の原則には「無駄の排除」があり、インターネット上では低解像度の写真を使用したり、照合する際にデータベースをインメモリキャッシュに移動したりといった消費電力への配慮も、その原則に含むことができるだろう。

3.開発とテストのパイプラインで使用するリソースを最小限に抑える

 開発とテストにSaaSツールを選択する方が、サーバにツールをインストールして運用するよりも効率が良くなるのが一般的だ。一方で、クラウドアプリを使うと、演算処理の肥大化に悩まされる可能性がある。

 例えば最近のDevSecOpsツールの多くは、フル装備のテスト環境を作成し、コミットするたびに全ての自動チェックを実行する。DevSecOpsでは、セキュリティのフルスキャン、コード解析、複雑性分析、そしてクラウド内にデータベースを立ち上げることがある。チームがコードをマージすると、この全ての工程が最初からやり直しになることもある。一部のシステムは、おそらく数十の監視対象ブランチ上で遅延して実行され、自動的に再起動される。

 また可観測性ツールによってあらゆるものを監視すると、演算処理が肥大化し、ネットワークが飽和状態になる可能性がある。例えば、全てのテストに対して可観測性ツールをアクティブにするシナリオを考えてみよう。可観測性ツールは、ネットワークトラフィックが発生するたびに「どの情報がどこに送信されるか」を示すメッセージをサーバに送信する。これによってテストトラフィックは事実上、倍増する。その結果、事実上無駄なエネルギーが消費される。その上、テストサーバの実行が遅くなり、ほとんどメリットは得られない。最悪の場合、運用サーバにも影響し、運用が停止する恐れもある。

 「開発とテストのパイプラインでどの程度のアクティビティーが行われるのか」を正確に監査することで、演算処理の削減と電力消費量の低下の両方が得られる可能性がある。例えば「開発チームが、ビルドプロセスではクラウドネイティブのコンテナイメージを作成し、初期テストはローカルのノートPCで行う」といったこともできるだろう。

4.アップデート、テスト、デプロイするコードを分離する

 モノリシックなシステムにすると、ビルドのたびに、コストのかかる回帰テストプロセスが必要になる可能性がある。そのプロセスを完全に自動化したとしても、ビルドと自動チェックプロセスの大半は冗長になり、ビルドのたびに以前と同じことがやり直されることになる。マイクロサービスにすれば、コードの1つのセクションだけを一度に変更、テスト、デプロイ、監視できる可能性がある。

 他にも最近のアプローチとして、PHPなどの言語を使えば、1つのWebページへのコードデプロイを一度に行える。PHPなどのインタープリタ言語を利用し、コードをコンパイルして、CPUとメモリの使用量を減らして実行する小さなファイルを作成するツールもある。

5.ロールアウトのプロセスをシンプルにする

 一般に、CDのアプローチを採用する場合、コードのコミットからデプロイメントまでの間に3〜4日のサイクルタイムが発生するのが実情だ。この遅れは、人的要因や冗長な演算処理によって発生する可能性が高い。CI/CDパイプラインを分析することで、こうした時間を減らし、冗長な演算処理を削減することができる。

 ここまでの考え方は、コーディング、開発、テストでの実践方法に注目してきた。だが、運用チームでも同様の考え方で変化をもたらすことができるだろう。

6.太陽光や持続可能なエネルギーを利用する

 グリーンコーディングでは、主にソフトウェアの設計と運用に目を向けている。開発者もテスト担当者も、各々が地球環境に配慮した行動をとれる。経営者も同様だ。例えば、地球環境に配慮する車両を利用するだけでなく、通勤時間を短くしたり、通勤時間をなくしたりすることで、車両からの排出ガスを削減できる。太陽光発電や風力発電のような再生可能エネルギーは、家庭でも企業でも利用できる。企業は、こうした再生可能エネルギーを利用する従業員に奨励金を出すこともできる。多くの政府は、企業レベルや個人レベルでの持続可能性の取り組みに対して、税制上の優遇措置や報奨金などの制度を設けている。

グリーンコーディングの始め方

 グリーンコーディング実践の大きなメリットの一つは、グローバルでもローカルでも着手できる点にある。開発者は、個人として、システムやコードのフットプリントを減らす方法についてブレインストーミングすることができる。開発チームとしては、CI/CDパイプラインの見直しやアーキテクチャ上のベストプラクティスの検討に取り組むことができる。

 必要なのは、誰かがこの取り組みを始めることだけだ。CI/CDパイプラインの変更、コーディングプラクティスの分析、コンテナの追加、マイクロサービスへのリファクタリングは全てソフトウェア開発チームの管理下にある。

 また、地球環境に配慮するアーキテクチャにするためのアイデアは、取り組むには規模が大きくなるので、上層部の手に委ねる。グリーンコーディングについて賛同を得るには、次のような業務上のメリットを強調するといいだろう。

コスト削減

 グリーンコーディングに取り組めば、エネルギー消費量が減少する。エネルギー消費量の削減を重視することで、ネットワークも簡素化、縮小され、テスト環境の無駄な利用も抑制できる。このような変化によって、コンピューティング費用が削減される。

より良い規律

 プログラマーは、プロトタイピング中やブレインストーミング中に迅速かつ創造的に作業することを重視するようになるかもしれない。ただし、チームが言語やコード設計の選択を終えたら、メモリ、CPU、ディスクの使用量に注意したいところだ。使用量を抑えれば、エネルギーが節約され、ソフトウェアエンジニアリングの向上につながる。

モラルの向上

 地球環境に配慮することは従業員にもメリットをもたらす。開発者は、「演算処理が肥大化することがあまりないエレガントなシステムをビルドし、クラウド技術をうまく活用したい」と考えるようになる。グリーンコーディングの実践に役立つかどうかに関係なく、従業員は「テレワークを活用しよう」と考えるようになるかもしれない。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る