Google Colabを使っていると、作成したファイルや加工したデータが、ランタイムの切断とともに消えてしまった、という経験をした人は多いのではないでしょうか。
Google Colabは便利な実行環境ですが、ローカルのストレージはあくまで一時的なものです。ランタイムがリセットされると、そこに保存したファイルはすべて失われます。
そんなときに便利なのが、Google Driveとの連携です。Google Driveをマウントすることで、Colab上からDrive内のファイルを直接読み書きできるようになり、ノートブックをまたいだデータの永続化や、他のメンバーとのファイル共有が簡単になります。
本記事では、Google ColabからGoogle Driveを利用する基本的な方法と、その活用例を紹介します。
対象読者
- Google Driveは知っているが、Google Colabとの連携方法を知らない人
- Colab上で作成したファイルや学習済みモデルを、ランタイムが切れても残しておきたい人
- 大きなデータセットを、毎回ローカルからアップロードするのが面倒な人
- 複数のNotebookで、同じデータやファイルを再利用したい人
- ランタイムがリセットされるたびに、作業を一からやり直すのに困っている人
- ローカル環境を構築せずに、ブラウザだけで開発や分析を進めたい人
すぐに使えるチートシートはこちら Google Colab版
すぐに実行して、試せるコードレシピはこちら。
Google DriveをColabにマウントする
Google Colabには、google.colabパッケージにdriveモジュールが標準で用意されており、これを使うことでGoogle Driveをファイルシステムの一部としてマウントできます。
まずは、以下のコードを実行してみます。
from google.colab import drive
drive.mount('/content/drive')
実行結果:
Mounted at /content/drive
実行すると、Googleアカウントへのアクセス許可を求めるポップアップ、もしくはリンクが表示されます。案内に従ってログイン中のGoogleアカウントを選択し、アクセスを許可すると、認証が完了しマウントが実行されます。
左側のペインの「ファイル」タブからも、driveというフォルダが追加され、その中にGoogle Driveの中身が展開されていることが確認できます。
マウント後のディレクトリ構成
マウント後は、自分のGoogle Driveのマイドライブが /content/drive/MyDrive/ 以下に展開されます。試しに中身を確認してみます。
!ls "/content/drive/MyDrive/public/qiita/sample_server"
実行結果:
sample.txt
パスさえ分かれば、あとは通常のColab上のファイル操作と同じ感覚で読み書きができます。
ファイルの作成・編集・削除を試す
Google Drive上でテキストファイルを操作する方法はいくつかありますが、ここでは代表的な3通りのやり方(マジックコマンド/Pythonのfileモジュール/osモジュール)で、それぞれ「作成 → 編集 → 削除」という一連の流れを試してみます。
マジックコマンドで操作する
Colabの!(シェルコマンド)や%%writefile(セルマジック)を使うと、コードをほとんど書かずに手早くファイル操作ができます。
%cd "/content/drive/MyDrive/public/qiita/sample_server"
!touch sample_magic.txt
!ls
実行結果:
/content/drive/MyDrive/public/qiita/sample_server
sample_magic.txt sample.txt
touchで空のファイルを作成できました。中身は%%writefileで書き込みます。セルの1行目に書いたファイル名へ、2行目以降の内容がそのまま書き込まれます。
%%writefile sample_magic.txt
hello world (via magic command)
実行結果:
Overwriting sample_magic.txt
内容を確認してみます。
!cat sample_magic.txt
実行結果:
hello world (via magic command)
編集(上書き)したいときも、同じ%%writefileをもう一度実行するだけです。最後に、不要になったファイルを!rmで削除します。
!rm sample_magic.txt
!ls
Pythonのfileモジュールで操作する
組み込みのopen()関数を使う、最も基本的な方法です。モード('x', 'w', 'a', 'r'など)を使い分けることで、作成・上書き・追記・読み込みができます。
file_path = "sample_open.txt"
# 'x'モード: ファイルが存在しない場合のみ新規作成する
with open(file_path, "x") as f:
f.write("hello world (via open)\n")
続けて、'a'モードで内容を追記(編集)してみます。
with open(file_path, "a") as f:
f.write("追記した行です\n")
内容を確認します。
with open(file_path, "r") as f:
print(f.read())
実行結果:
hello world (via open)
追記した行です
なお、open()が扱えるのはあくまでファイルの中身であり、ファイルそのものを削除することはできません。ファイルの削除には、次に紹介するosモジュールの機能を使います。
osモジュールで操作する
osモジュールを使うと、ファイルの存在確認や削除など、ファイルシステムそのものを操作できます。低レベルなos.open / os.write / os.closeを使えば、ファイルの作成から書き込みまでをosモジュールだけで完結させることもできます。
import os
file_path = "sample_os.txt"
# os.open + os.write でファイルを新規作成・書き込み
fd = os.open(file_path, os.O_CREAT | os.O_WRONLY | os.O_TRUNC)
os.write(fd, "hello world (via os module)\n".encode())
os.close(fd)
print("存在確認:", os.path.exists(file_path))
実行結果:
存在確認: True
編集(上書き)したい場合も、同じ流れでos.O_TRUNCを指定して書き込み直します。
fd = os.open(file_path, os.O_WRONLY | os.O_TRUNC)
os.write(fd, "内容を書き換えました\n".encode())
os.close(fd)
with open(file_path) as f:
print(f.read())
実行結果:
内容を書き換えました
最後に、os.remove()で削除します。
os.remove(file_path)
print("存在確認:", os.path.exists(file_path))
実行結果:
存在確認: False
この一連の操作は、Colab上だけでなくGoogle Drive側にもそのまま反映されます。実際にDriveの画面を開いて確認すると、ファイルが作成・更新・削除されている様子を見ることができます。
手早く済ませたいときはマジックコマンド、コード内で完結させて処理を組み立てたいときは**open()(fileモジュール)、存在確認や削除など一段低いレベルの操作が必要なときはosモジュール**、といった形で使い分けるとよいでしょう。
作業フォルダを固定しておくと便利
Drive内の特定フォルダを作業ディレクトリとしてos.chdirで固定しておくと、以降のセルで相対パスが使えるようになり、コードがすっきりします。
import os
work_dir = "/content/drive/MyDrive/colab_projects/my_project"
os.makedirs(work_dir, exist_ok=True)
os.chdir(work_dir)
print("カレントディレクトリ:", os.getcwd())
まとめ
Google ColabとGoogle Driveを連携させることで、ランタイムのリセットに左右されずにファイルを永続化でき、Notebookをまたいだデータやコードの再利用もしやすくなります。
drive.mount()を実行するだけで使い始められる手軽さも大きな魅力です。日々のデータ分析や検証作業では、まずGoogle Driveをマウントする、という流れを習慣にしてみてください。
補足・注記事項
- Google Colabのランタイムやディスク容量、利用制限などの詳細は、Googleの公式資料をご確認ください。
- 本記事では
google.colab.driveによるマウント方式を紹介しましたが、より柔軟な操作(自動化やサービスアカウントでのアクセスなど)が必要な場合は、Google Drive API(google-api-python-client)の利用も検討してください。 - Google Drive上のデータも、GitHub同様、機密情報や認証情報の置き場所としては適していません。アクセス権限の設定と合わせて、保存するデータの取り扱いには注意してください。
弊社について
本記事を書いている 合同会社インクルーシブソリューションズ は、データ基盤構築・分析基盤設計・システム改善支援を中心に活動している小規模IT法人です。
主な領域は、
- データマート設計・データパイプライン構築
- SQL / Python を用いたデータ処理設計
- BI導入支援・分析基盤の整備
- 既存システムの運用改善・可視化支援
といった、「データを使える状態にする」ための活動です。
弊社の企業活動に興味がある方は、ぜひ公式サイトも覗いてみてください。