2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Google Colaboratory(個人的便利シート)

Last updated at Posted at 2022-01-04

Google Colaboratoryとは

一言で言えば、Google版Jupyter Notebook。Googleが提供する無料サービスの一つで、クラウド上でPythonの記述、実行ができます。

ブラウザgoogleアカウントさえあれば
Pythonの実行環境をサクッと3秒で構築できてしまいます。

クロスプラットフォームな実行環境であるため共同開発での差異が小さく1
また各ノートブックがサンドボックスであり初期化 → 実行新規作成 → 破棄 → 新規作成のような使い切り開発や、
ノートブックのコピー → 破棄のような使い捨てもできます。

Colaboratory へようこそ

出来たこと

機械学習周りいろいろ
githubとの連携
簡易のhttp.server、CGIサーバーの起動
Googleの各無料サービスとの連携、APIの利用
Flask、FastAPI、Streamlit、SQLAlchemyの利用、連携
Ngrok、localtunnelの利用
その他いろいろ

各名称

colab_screen.jpg

①メニューバー

各設定、操作ができます。

ファイル編集表示挿入ランタイムツールヘルプ

②左ペイン

アイコンをクリックすると、 スペース③ へ各ブラウザを表示することができます。

>上から、 `目次`、`検索と置換`、`コードスペニット`、`変数`、`ファイル` のアイコンです。 `ファイル`アイコンをクリックすると、`③ファイルブラウザ`を開きます。

③ファイルブラウザ

②左ペインの一番下ファイルをクリックすると出現します。

左上からファイルの選択状態の更新ドライブアイコンが並びます。

ドライブアイコンからGoogleドライブをマウントすることができます。
カレントディレクトリは/contentです。

コードセル
!echo > xxx.txt
!pwd
!ls

/content
sample_data sample.py xxx.txt

④⑤セル

④テキストセル⑤コードセルがあります。

コードセルの中でシステムコマンドマジックコマンドが使えます。

記法
システムコマンド ! シェルコマンドなど
マジックコマンド %
%%
ラインマジック
セルマジック

先頭に!や%を書きます。

コードセル
!echo hello world
%history
コードセル
%%bash

⑥エディタ

ファイルや画像、各情報を表示・出力します。

テキストエディタでは一括置換などのショートカットキーがいくつか用意されています。
また、⑤コードセルにも一部テキストエディタとしての機能が備わっています。
編集後、しばらく待つか、タブの上をワンクリックすると上書き保存されます。

⑦ランタイムやセッションの状況

ランタイムが起動しているか視認できたり、セッション管理が行えます。
準備中

ショートカットキー

キー 操作 場所
Shift + Enter セルの実行 コードセル
Ctrl + D 一括編集 コードセル
エディタ

便利シート

基本

コードセルに書く。

システムコマンドマジックコマンドは、pythonコードと一緒に書くことができます。

コードセル
print("start") #python
# シェルコマンド
!ls
print("end") #python

start
sample_data sample.py xxx.txt
end

各コードセルの変数の値は保持されます。

コードセル1
a=2
コードセル2
print(a+3)

5

コードセルで保持された変数をシステムコマンドで使う。

$変数名システムコマンドで使えます。

コードセル
path="tmp1"
!mkdir /content/$path

/content/tmp1が作られます。

システムコマンドの実行結果をコードセルの変数に格納する。

コードセル
res=!echo hello
print(res)
res=!python -c 'print("world")'
print(res[0])

['hello']
world

フォーム、Markdownを使う。

コードセルテキストセルで使います。

インタラクティブなフォーム(公式の例↓のみで十分)
https://colab.research.google.com/notebooks/forms.ipynb

Markdown記法であれば大抵対応
https://colab.research.google.com/notebooks/markdown_guide.ipynb

よく使うコマンド

ファイルを作成・保存する。

%%writefile ファイルのパスコードセルの1行目に書きます。
1行目以外のすべての行が、改行を維持したままファイルのパスへ保存されます。

コードセル
%%writefile xxx.py
import time
time.sleep(1)
print("hello")
コードセル
!python xxx.py

スクリーンショット_2022-01-04_19-26-49.png

シェルコマンドechoを使います。

コードセル
r=10
s=f"""
hoge={r}
fuga=20
""".strip()
!echo -n "$s" > xxx.txt

hoge=10
fuga=20

スクリーンショット_2022-01-04_19-26-49.png

他にも直接ファイルをアップロードしたりすることができます。

bashモードで書く。

%%bashを1行目に書くことで、pythonモードからbashモードになります。

コードセル
%%bash
sleep 3
echo hello world

hello world

その他シェルコマンドを使う。

cdpipnohupなど、多くのコマンドに対応しています。

コードセル
%%writefile requirements.txt
streamlit
fastapi
コードセル
!pip install -r requirements.txt

よくやる操作

セルの実行

選択中のコードセルShift + Enter
スクリーンショット_2022-01-04_19-26-49.png
コードセルの  をクリック
スクリーンショット_2022-01-04_19-26-49.png
メニューバーから、
ランタイム > すべてのセルを実行 or ランタイム > 現在のセルを実行

セルの実行停止

コードセルの  をクリック

一回で停止しない場合は、何回かクリックします。

停止するまでに遅延があるので、クリック連打による再実行に注意

スクリーンショット_2022-01-04_19-26-49.png

メニューバーから、
ランタイム > 実行を中断

ランタイムを出荷時設定にリセットする。

何か上手くいかなかったときは再起動。

メニューバー > ランタイム > ランタイムを出荷時設定にリセット

すべてのローカル変数やファイルを含め、ランタイムの状態は保存されません。

ただし、追加したセルは保存されます。

起動中のセッションを終了する。

⑦セッションの状態 > セッションの管理 > 終了

Googleドライブをマウントする。

左ペイン > ファイルアイコンをクリック > ドライブアイコンをクリック

スクリーンショット_2022-01-04_19-26-49.png

コードセル
from google.colab import drive
drive.mount("/content/gdrive")

ファイルブラウザ or エディタを起動する。

ディレクトリ構造やファイルの中身を視認します。
画像ファイルを表示することもできます。

コードセル
from google.colab import files
files.view("/content")
files.view("/content/xxx.txt")

スクリーンショット_2022-01-04_19-26-49.png

コードセル
#クォーテーションで囲まれたファイルやディレクトリの絶対パスの上に
#マウスのポインターを置き、出現したポップアップをクリック
print("/content")

スクリーンショット_2022-01-04_19-26-49.png

左ペイン > ファイルアイコンをクリック > ファイルをダブルクリック

テキストエディタでは Ctrl+D などのショートカットキーが使えます。

ファイルのアップロードフォームを表示する。

コードセル
from google.colab import files
uploaded = files.upload()

ローカルホストを出力する。

サーバーが立ち上がったかどうか確認するため、ローカルホストのURLを出力します。

コードセル
from google.colab.output import eval_js
port=8010
eval_js(f"google.colab.kernel.proxyPort({port})").strip("/")

'https://--8010-colab.googleusercontent.com'

画像関連

コードセルの出力画面に画像を表示する。

IPythonを使います。(標準でインストール済みです。)
!pip show IPython

ローカルに保存した画像パスから画像を読み込む。

コードセル
from IPython.display import Image,display_jpeg,display_png
display_jpeg(Image("sample.jpg"))

ローカルに保存せずに画像URLから表示する。

コードセル
from IPython.display import Image,display_jpeg,display_png
img_url="https://dummyimage.com/100x50/6e6e6e/ffffff.jpg"
Image(url=img_url)

Image(url=img_url)は最後に実行する必要があります(空行やコメントアウト行を除く)。

画像URLから取得したバイナリデータをio.BytesIOに渡す。

コードセル
from io import BytesIO
import requests
img_url="https://dummyimage.com/100x50/6e6e6e/ffffff.jpg"
img = BytesIO(requests.get(img_url,timeout=15).content)
# 表示する場合
#import IPython
#IPython.display.Image(img.getvalue())

IPython.display.Image(img)は最後に実行する必要があります(空行やコメントアウト行を除く)。

画像URLから画像を保存する。

コードセル
from io import BytesIO
import requests
import IPython
img_url="https://dummyimage.com/100x50/6e6e6e/ffffff.jpg"
img = BytesIO(requests.get(img_url,timeout=15).content)
output="/content/sample.jpg"
with open(output, "wb") as f:
    f.write(img.getvalue())

Pillowを使う。

コードセル
from io import BytesIO
import requests
import IPython
import PIL
img_url="https://dummyimage.com/100x50/6e6e6e/ffffff.jpg"
img = BytesIO(requests.get(img_url,timeout=15).content)
output="/content/sample7.jpg"
img = PIL.Image.open(img)
img.save(output)

フレームワークとの連携

Streamlitを起動する。

コードセル
#portはデフォルトで8051
!streamlit run app.py
#!streamlit run app.py --server.port=8030

ColabratoryではそのままではStreamlitの全機能を使うことができないので
ngrokかlocaltunnelでトンネルして起動します。

ngrokは最近よく失敗するのでlocaltunnelおすすめです。

ngrok、localtunnel共にローカルで実行中のアプリを外部公開するサービスなので、
公開URLを知っている人なら誰でもアクセスできてしまいます。

ngrokで

コードセル
import nest_asyncio
from pyngrok import ngrok
ngrok_tunnel = ngrok.connect(8051)
host=ngrok_tunnel.public_url
nest_asyncio.apply()
print("Public URL:", host)
!streamlit run app.py

Public URL: http://********.ngrok.ioをクリックして移動。
Click to Continueボタンを押す。

localtunnelで

コードセル
!streamlit run app.py & sleep 10 && npx localtunnel --port 8501

your url is: https://*****-*******-**.loca.ltをクリックして移動。
Click to Continueボタンを押す。

FastAPIを起動する。

コードセル
from google.colab.output import eval_js
port=8030
eval_js(f"google.colab.kernel.proxyPort({port})").strip("/")
import uvicorn
!uvicorn.run(app=app, port=int(port),host="0.0.0.0")

https://***********-****************-8030-colab.googleusercontent.comに接続。

ngrokで
Streamlitを起動する。を参照。

localtunnelで
Streamlitを起動する。を参照。

localhostとして他のアプリケーションと連携したい場合のエンドポイントは、
http://localhost:[port番号]/です。
例:
Streamlitをlocaltunnelで + FastAPIをlocalhostで

ノートブック

準備中

予定のcolabノートブック

FastAPI(最小構成)

Streamlit+FastAPI(最小構成)

Streamlitページ遷移
Streamlitポップアップ
Streamlitページ遷移+ポップアップ

FastAPI+SqlAlchemy

ToDoアプリなどwebアプリ群

簡易サーバー起動 nohupも

  1. ブラウザやバージョンにより挙動が異なることもあるようです。

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?