ソフトウェア

プログラムの実行時間を99%短縮した「たった1行のコード」とは?


プログラムの実行速度やウェブサイトの表示速度は、たった数秒の改善でも多くのエンジニアたちの苦心を必要としますが、時として拍子抜けするほどにあっけなく、かつ劇的な改善がなされる場合もあります。画像共有サービスのPinterestが自社のブログで「たった1行の変更でコードの実行時間を99%短縮した」事例を紹介しています。

How a one line change decreased our build times by 99% | by Pinterest Engineering | Pinterest Engineering Blog | Oct, 2020 | Medium
https://medium.com/pinterest-engineering/how-a-one-line-change-decreased-our-build-times-by-99-b98453265370

実行速度の短縮を実現したのは、Pinterest内でソフトウェアのビルドやデプロイに関してエンジニアを支援する「エンジニアリング生産性チーム」とのこと。Pinterestでは「Pinboard」「Optimus」「Cosmos」「Magnus」「iOS」「Android」という6つのGitHubリポジトリを運用しており、このうち最も古いのがPinboardリポジトリ。35万以上のコミット数があり、全体をクローンするとデータサイズが20GB以上にもなる巨大なリポジトリです。エンジニアリング生産性チームは、これらのリポジトリのメンテナンスなども行っています。

Pinterestでは自動化ツールのJenkinsによるソフトウェアのビルドとデプロイを行っており、自動化された一連の処理の冒頭に以下のコードを配置して、GitHubリポジトリから最新のパッケージをクローンしていたとのこと。最新50件のコミットのみ取得する「depth: 50」、最新のコミット履歴のみを取得する「shallow」オプションなどが指定されており、巨大なリポジトリのクローンを高速化できるよう工夫がなされているように見えます。


上記のコードを改善したコードが以下。赤枠の「refspec: '+refs/heads/master:refs/remotes/origin/master'」が追加されています。


改善後のコードで追加されたのは、処理対象のブランチの範囲などを指定できる「refspec」オプションです。Gitの仕様上、refspecオプションを指定せずクローンを行うと、リモートリポジトリ内のすべてのブランチをフェッチしてコミット履歴を取得するとのこと。Pinboardリポジトリの場合では、改善前はリポジトリに存在する2500以上のブランチをすべてフェッチしてからmasterブランチをクローンするという、効率の悪い状態でした。改善後のコードでは、refspecによってフェッチするブランチをmasterブランチに制限しています。

この1行の変更によって、リポジトリのクローンにかかる時間は40分から30秒へと、割合にして99%の短縮に成功。ソフトウェアのビルドにかかる全体の速度も劇的に改善したとのこと。Pinterestのエンジニアリング生産性チームメンバーは「1行の違いが時には大きな違いを生むことがあると、そう理解することが私たちの仕事です」とコメントしています。

この記事のタイトルとURLをコピーする

・関連記事
プログラマーの努力とコードの行数が比例しない7つの理由 - GIGAZINE

開発者の扱うコードの量や複雑さはここ10年で100倍以上に増えている - GIGAZINE

2万7000行ものコードをひとつのファイルに書いたLinuxカーネルパッチが送りつけられる - GIGAZINE

プログラマーを30年間やってきた経験から学んだことまとめ - GIGAZINE

超一流プログラマーはどういう働き方をしているのか? - GIGAZINE

in ソフトウェア, Posted by darkhorse_log

You can read the machine translated English article here.