LoginSignup
29

More than 5 years have passed since last update.

colaboratoryノートブックをGitHub上で扱うために、初期設定するcolaboratoryノートブック作った

Posted at

はじめに

みなさま、colaboratory使ってますか?

無償で中々のスペックの環境が利用できるので非常に便利ですが、そこで作成したノートブックは、Google Driveに保存され、管理や共有には若干手間がかかります。
一方で、GitHubに保存したノートブックは、colaboratoryで開くこともできますし、他のファイルとまとめて管理したり共有したりするのに便利です。

ただ、colaboratoryで作成したノートブックをGitHubに保存した後は、自動保存されたGoogleDrive上のノートブックを削除しないといけないし、それを回避するために先にGitHubレポジトリにファイルを作るのも結構面倒・・・。
そういう訳で、ズボラに使いまわせるよう、GitHubにレポジトリとノートブックを作成するノートブックを作ってみました。

手順

今回作成したノートブックはこちらで置いています。

事前準備は以下の通りです。慣れていれば10分程度、そうでなくても20分くらいで済みます。

  • GitHubのアクセストークンを取得する
  • Google Driveの任意の環境に前述のノートブックを保存する
    • アクセストークンを使うので、非公開設定にしておくこと
  • ノートブックのアクセストークンを自分のもので書き換えておく

ここまで設定すれば、次からは、必要な時に以下の手順を行うだけです。

  1. Google Driveでノートブックを開く
  2. ノートブック内で作成するレポジトリ名やノートブック名を指定する
  3. ノートブックを実行する
  4. リンクが生成されるので、ノートブックを開く

一度作成したノートブックの変更は、colaboratoryのツールバー上で「ファイル」「GitHubにコピーを保存」から反映できます。

ノートブックの詳細

設定

使用するライブラリをインストールし、レポジトリやファイル名を設定。
アクセストークンは各自取得したものに置き換えます。

設定
!pip install -q PyGitHub

from github import Github, GithubException
import nbformat

access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

repository_name = 'TestRepository' 
ipynb_file_name = 'test.ipynb'

レポジトリ作成

指定したレポジトリが存在しない場合作成します。

レポジトリ作成
github = Github(access_token)
user = github.get_user()

try:
  user.create_repo(repository_name)
except GithubException:
  print(f'{repository_name} already exists on this account.')

ノートブックデータ作成

作成するノートブックをここで定義します。通常のプログラムのセルは勿論、マークダウンセルも定義できる。
自分がよく使う設定があればここを書き換える。

ノートブックデータ作成
nb = nbformat.v4.new_notebook()

title = '# setting'
code = """
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
"""

nb["cells"] = [
    nbformat.v4.new_markdown_cell(title),
    nbformat.v4.new_code_cell(code)
]

レポジトリでノートブック作成

前段で定義したノートブックをレポジトリ上に作成します。
同名のファイルがあるときは怒られるので、エラーを出すようにしています。

レポジトリにノートブック作成
repo = user.get_repo(repository_name)

try:
  repo.get_contents(ipynb_file_name)
  raise(Exception(f'{ipynb_file_name} already exists in {repository_name}.'))
except GithubException as e:
  repo.create_file(ipynb_file_name, f'create {ipynb_file_name}', nbformat.writes(nb))

作成ファイルのリンク出力

GitHubに作成したファイルは、以下の規則のリンクでアクセスできます。

print(f'github: https://github.com/{user.login}/{repository_name}/blob/master/{ipynb_file_name}')
print(f'colab:  https://colab.research.google.com/github/{user.login}/{repository_name}/blob/master/{ipynb_file_name}')

参考

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
29