Google Cloud Shellを始めよう
クラウドコードエディタCode OSSなど、すぐにWebアプリなどの開発が始められる環境が整っている、とても便利なGoogleの開発者向けサービス。それがGoogle Cloud Shellです。
無料で使えるGoogleのクラウドでの開発環境としてはGoogle Colaboratoryが、より広く知られているサービスかと思われますが、Cloud Shellでも、同等といってよい使い方が可能で、個人的によく使っています。
なぜCloud Shellを選ぶのか
メリットは何といっても、ユーザーディレクトリに保存したデータ終了時に削除されずに、永続化しておけることでしょう。pip
やnpm
のパッケージやShellの個人設定ファイル、ソースコード、テキストや画像データなど、容量の許す限り好きなものを保存しておけます
一週間のうち60時間までという利用時間の制限や、120日間以上アクセスせず放置しておくと、HOMEディレクトリ配下のデータがすべて消去される、不定期に強制的にシャットダウンされることがある、といった注意点はありますが、無料でこれだけユーザーに高い自由度を許容されているサービスは他ではまず見かけません。
使用上の問題点と改善方法
問題はそのユーザーに割り当てられているディスク容量のサイズでしょう。下記のように最大で4GBほどが上限となっています。
Google Colaboratoryのように使う場合は、Jupyter Labのようなアプリもユーザーディレクトリ配下にインストールしなければなりませんので、ディスク領域の確保は切実な問題です。
ディスクの使用量を削減するためには様々な工夫が必要ですが、まずはCloud Shellの日本語化を行うことをお勧めします。日本語ロケールはシステムにインストールするため永続化できず、システムを起動するたびに再インストールが必要です。
ユーザーディレクトリ直下に.bash_login
という名前でファイルを作成し、以下のコードを設定しておけば、自動的にインストールするように出来ます。
locale --all | grep --quiet ja_JP.utf8
if [ $? -ne 0 ]; then
sudo localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8 -v 2>/dev/null
fi
export LANG=ja_JP.UTF-8
インストールのオーバーヘッドはそれほど大きくないので、この対応で問題無いでしょう。
では本題のディスク容量対策ですが、df
コマンドの結果で判るように、大容量のディスクサイズが割り当てられていて、空き容量が多い、homeディレクトリより上位の永続化されないボリュームを活用することで実現します。
この領域のデータはシステム終了時に消去されますが、前もってクラウドストレージ/ドライブへ退避しておくことも出来るので、十分実用的といえます。
作業用ディレクトリの作成
まずはGoogle Colaboratoryでよくあるデータ分析を行う際、一時的に大きなサイズのファイルを読み込むための手段ですが、下記の例ようにhomeディレクトリより上位に任意のディレクトリを作成し、ユーザーが書き込めるようにパーミッションを変更する処理を、.bash_login
ファイルに追加しておきます。
if [ ! -d /var/work ]; then
sudo mkdir -v /var/work
sudo chown -Rc $USER:$USER /var/work
fi
この例ではシステム起動時に/var/workディレクトリが自由に書き込み出来るように準備され、色々な目的で大きなサイズのデータも扱うことが出来るようになります。
この領域に例えばデフォルトで利用可能なgsutils
コマンドや、テキストベースのユーティリティが提供されているMEGAや、多様なサービスに対応するRCLONEなどにより、データを取り込んでJupyter Labで分析したり、GitHubからリポジトリをクローンして、ビルドした成果物をユーザーディレクトリに保存しておく、といった利用方法が考えられます。
キャッシュデータ対策
さらに重要なのは、意図せずディスク容量を消費される、パッケージマネージャなどのキャッシュデータに関する対策です。キャッシュにはそれなりの効能はありますが、使っているうちに肥大化していきますし、貴重なディスク容量を使ってまで永続するほどのものではないと思います。
まずは典型的なものとしてpip
、npm
の対策として、やはり.bash_login
に下記を追加します。
if [ ! -d /var/cache/pip ]; then
sudo mkdir -v /var/cache/pip
sudo chown -Rc $USER:$USER /var/cache/pip
fi
if [ ! -d /var/cache/npm ]; then
sudo mkdir -v /var/cache/npm
sudo chown -Rc $USER:$USER /var/cache/npm
fi
export npm_config_cache=/var/cache/npm
その上でpip
コマンドの設定ファイルpip.conf
をホームディレクトリ直下の.pip
ディレクトリ内に作成し、以下設定で保存します。
[global]
cache-dir=/var/cache/pip
この設定により、システムが起動してから終了するまでに取得したキャッシュデータは有効となります。
その他のパッケージマネージャを利用する場合も、個別に同様の対策を実施することにより、ディスク容量の確保を図れます。
個別のアプリケーションでの対策
Cloud Shellでファイルの整理などをする場合は、デフォルトでインストールされているMidnight Commanderが便利です。
個人的にはとてもよく利用するので、キャッシュ対策は必須です。サイズの大きい圧縮ファイルを展開する際にも一時ファイルがキャッシュされるので、ユーザーディレクトリの空き容量が不足していると開けなくなったりします。
こちらにはキャッシュディレクトリを任意に設定できないので、シンボリックリンクにより問題を回避します。
if [ -d ~/.cache/mc ] && [ ! -h ~/.cache/mc ]; then rm -rfv ~/.cache/mc; fi
if [ ! -d /var/cache/mc ]; then
sudo mkdir -v /var/cache/mc
sudo chown -Rc $USER:$USER /var/cache/mc
fi
if [ ! -d ~/.cache/mc ]; then ln -sv /var/cache/mc ~/.cache/mc; fi
クラウドストレージ/ドライブで提供されているユーティリティには、仮想ドライブとしてマウントする機能を備えているものもあるので、こうしておけばクラウドストレージ/ドライブの大容量のファイルの整理のためにも活用できるようになりますが、注意すべき設定項目があります。
メニュバーのオプション(O)→設定(C)で開ける設定オプション画面の「File Operations」グループに「Preallocate space」というチェックボックスが有ります。
この設定の働きに関しては英語表示なので推測も含みますが、ファイルのコピーを行う際、事前にコピー先にコピー元のファイルと同一サイズのダミーのファイルを作成することにより、コピー先のディスク容量が不足しないか確認し、不足する場合は作業を中断する機能のようです。
当然クラウドストレージ/ドライブにはこのような機能に対応できないため、コピーなどを実行するとエラーで失敗となります。
下記はチェックボックスをオンにした状態で、MEGAのドライブをマウントした状態でファイルをコピーしようとした際に表示された画面です。
エラーを回避するためには、チェックを外してこの機能を無効に設定しておけば大丈夫です。ここまでしておけば、数ギガバイトのデータを一括でクラウドにコピーしたりすることも可能となりましたが、Cloud Shellには強制シャットダウンというリスクもあるので、1GB程度までに振り分けて作業した方が無難ではないかとは思います。
終わりに
以上、Google Cloud Shellを快適に利用するための最低限の準備の方法を解説させていただきましたが、これを機に使ってみようと興味を持っていただけたら幸いです。