PythonistaとGitHubの連携

Python学習【365日チャレンジ!】365日目のマスターU(@Udemy11)です。

ついに、Python学習365日チャレンジの最終日がやってきました!

実際に、この日を迎えてみると、思ったより短かったな〜というのが率直な感想です。

このチャレンジを始めるときは、1年間毎日記事を書けるのか不安でしたが、Pythonを学習した内容を健忘録のように記録することを繰り返していると、あっという間に1ヶ月、2ヶ月と過ぎていきました。

3ヶ月ほど経ったくらいの時期に、Python学習自体でつまづきも出てきたので、記事にするのがちょっとむずかしい時期がありました。

その時期をなんとか切り抜けて、また順調に記事を書けたと思うとまたつまずいてという繰り返しだったのですが、もっとも危うかったのが年末年始です。

気持ちは年末だし、サボってゆっくりしたいと思いながらも、それまでに継続してきた日数から考えると、ゴールは目の前だったので、なんとかサボりたい気持ちを乗り越えて、今日まで実践することができました。

後ほど、Python学習365日チャレンジの振り返りを記事にしたいと思っています。

今日は、次のステップへの第一歩的な感じでPythonistaとGitHubの連携について学習したいと思います。

以前から、Pythonistaにシェル実行コマンド環境を作れるStaSh(Pythonista Shell)をインストールして、ファイルをGitHubでバージョン管理したいと思い、やってみたものの、うまくイカなかったので、すぐに諦めていましたが、今回、重い腰を上げて導入してみることにしました。

ちなみに【PythonistaにStaShをインストールする方法】は、Web上でたくさん記事にされているのですが、具体的に【Pythonistaで、GitHubを使ってバージョン管理をする方法】はあまり記事にはされていないのか、それとも実践している人がいないのか、検索してもなかなかヒットする記事がありません。

とりあえず、いろいろと試行錯誤しながら、なんとかGitHubとPythonistaで連携をとれるようになったので、健忘録の意味を含めて記事にしておこうと思います。

少しでも、Pythonistaを使いつつ、GitHubでバージョン管理をしたいと考えている方の参考になれば幸いです。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、GitHubを使うにあたって、gitの理解は必要不可欠なので、gitの基本的な使い方について学習しました。

基本的なgitの使い方は、git initでローカルリポジトリを作成して、git cloneでリモートリポジトリを複製して作業したあとgit commitでコミットしたコンテンツをgit pushでリモートリポジトリに反映させるという作業の繰り返しです。

一人で作業するときは、ローカルリポジトリを作成したあと、git addで、ローカルリポジトリのステージングエリアにコンテンツを追加する必要がありました。

gitの基本的な使い方の詳細については、こちらの記事をごらんください。

今日は、PythonistaでGitとGitHubを使ったバージョン管理について、私が実践したやり方を紹介していきたいと思います。

PythonistaでStaSh(シェルコマンド実行環境)をインストール

PythonistaでGitHubと連携をとるには、gitコマンドを使用できる環境を導入する必要があります。

そのために、Pythonistaでシェルコマンドを使うことができるStaShを使えるようにします。

Pythonistaの画面を右にスワイプして表示できる【コンソール】から下記コマンドを実行します。

import requests as r; exec(r.get('https://bit.ly/get-stash').content)

はじめてコンソールの画面を見るときは、どこに入力していいかわからなくなりますが、画面下の【>】マークの右をタップすれば、キーボードが表示されるので、ここにコピー&ペーストして実行します。

GitHubとPythonistaをgitでバージョン管理

これでPythonistaでStaShを使うためのパッケージがダウンロードされて、シェルコマンドからpipインストールやgitコマンドを扱う準備は完了です。

メニューの【This iPhone】の中に【launch_stash.py】ができているので、ファイルを開いて、右上の実行アイコンをタップすれば、StaShが立ち上がります。

GitHubとPythonistaをgitでバージョン管理

私のiPhoneが原因なのか、実行したときにアプリが落ちてしまうことがあるのですが、何度か実行すれば、きちんと立ち上がります。

PythonistaとGitHubの連携

ちなみにこれは、Python2.7の実行画面です。

Python2.7で実行

もしかしたら、この説明を先にしといたほうが良かったかもしれませんが、PythinistaはPython3.6とPython2.7を使えるので、デフォルトのインタープリターをPython2.7に変更しておきます。

Pythonistaのメニュー画面右下の歯車アイコンをタップします。

PythonistaとGitHubの連携

【Default Interpreter】をタップします。

PythonistaとGitHubの連携

【Python 2.7】をタップして、表示されるダイアログでも【Use Python 2.7】をタップしたあと、右上の【Done】をタップします。

PythonistaとGitHubの連携

Python3.6でも一応使えますが、いくつかのコマンドは実行できないという警告がでるので、Python2.7でStaShを使うようにしましょう。

PythonistaとGitHubの連携

SSH key(公開鍵)を作成

GitHubでデータを管理するためには、接続の際に必要になる公開鍵を作成して、GitHubのSSH keyに登録する必要があります。

Python2.7でStaShを立ち上げてから、次のコマンドを実行して、デフォルトよりセキュリティの高い2048bitのSSH keyを作成します。

ssh-keygen -t rsa -b 2048

作成したSSH keyは、【id_rsa.pub】という名前で【~/.ssh】フォルダに保存されているので、下記のcatコマンドを実行してSSH keyを表示します。

cat ~/.ssh/id_rsa.pub

表示されている文字列がSSH keyなので、すべてを選択してコピーします。

GitHubとPythonistaをgitでバージョン管理

GitHubにSSH-keyを登録

すでにGitHubのアカウントは保有している前提で解説していますが、まだGitHubのアカウントを取得していない場合は、下記の記事を参考にアカウントを取得してみてください。

まずは、GitHubにログインして【Account setting】から【SSH and GPG keys】を選びます。

PythonistaとGitHubの連携

次に表示される画面で、SSH keysの右にある【New SSH key】ボタンをクリックします。

PythonistaとGitHubの連携

【Title】にPythonista(任意の名前)、【Key】に先ほどコピーしたSSH keyをペーストして、【Add SSH key】をクリックします。

PythonistaとGitHubの連携

下記の画面が表示され、新しい【SSH key】が追加されます。

PythonistaとGitHubの連携

これでPythonistaのStaShからSSHでGitHubにアクセスするための準備が完了です。

git cloneでローカルに複製

続いて、昨日gitの基本的な使い方で作成したリモートリポジトリ(gittest)をPythonistaのローカルリポジトリにgit cloneで複製してみます。

StaShで、cdコマンドを使って、作業フォルダ(私の場合はgithub)に移動します。

GitHubとPythonistaをgitでバージョン管理

次のコマンドを実行します。

git clone git@github.com:udemymaster/gittest.git

これで、githubフォルダの中に、gittestフォルダが作成され、その中にhello.pyが作成されているはず。

GitHubとPythonistaをgitでバージョン管理

どういうわけか、フォルダ名がgittesになってしまっていましたが、まー良しとしましょう。

commitの状態を確認

git cloneを使ってリモートリポジトリをローカルリポジトリに複製できたので、git logを使ってコミットの状態を確認してみましょう。

GitHubとPythonistaをgitでバージョン管理

昨日、作業したファイルを作ったコミットと、GitHub上でコードを追加したコミットが記録されているのがわかるかと思います。

ローカルリポジトリで編集してadd

続いて、hello.pyに【I am MasterU】と出力するコードを付け加えて、リポジトリのステージングエリアにaddします。

hello.py

print('Hello World')
print('Yes!!')
print('I am MasterU')

ハイライトしている3行目を付け加えました。

次に画面を右にスワイプして、StaShに戻り、コマンドgit add hello.pyを実行して、hello.pyをステージングエリアに追加します。

PythonistaとGitHubの連携

ブランチを変更してコミット

続いて、Githubのメインブランチがmainなので、git branch -M mainを実行してブランチ名を変更してからコミットします。

PythonistaとGitHubの連携

mastermainに変更したメッセージが出たあと、エラーが起こっているので、ちょっと気になりますが、このままcommitしてみることにしました。

StaShは、git commitにメッセージを追加する-mのオプションが使えない代わりに、

git commit 'メッセージの内容' 'ユーザーネーム' 'メールアドレス'

という記述でユーザーとメールアドレス、メッセージをコミットに入れることができます。

PythonistaとGitHubの連携

コミットが完了したら、次のコマンドで、リモートリポジトリにcommitpushします。

git push git@github.com:udemymaster/gittest.git

メッセージのあとにsuccess!と表示されれば完了です。

PythonistaとGitHubの連携

GitHubで確認

Pythonistaで編集したhello.pyをGitHubのリモートリポジトリにpushしたので、状態を確認してみましょう。

iPhone用のGitHubアプリでgittestリポジトリを確認してみたところ、どうにもコミットが追加されていない模様。

PythonistaとGitHubの連携

StaShでは、問題なくpushが完了していたので、どこかにあるはずだと思って考えると、どうやらブランチが怪しいので、ブランチの右に表示されている【変更】をタップしてみると、やっぱりここに怪しいものがありました。

PythonistaとGitHubの連携

ブランチをmainに変更したはずなのに、masterブランチが作成されているではありませんか!

しかもその中に、きちんとコミットが記録されていました。

PythonistaとGitHubの連携

コードの中身もきちんと保存されています。

PythonistaとGitHubの連携

ブランチが、変更したはずのmainではなく、どうしてmasterに記録されているのかわからないのですが、とりあえずPythonistaとGitHubでgitを使ったやり取りができました。

まとめ

Python学習【365日チャレンジ】の最終日だったので、すべての問題を解決して終了したかったのですが、残念ながら解決することができませんでした。

すべてわかっているような体で記事を書いていますが、実のところ、めちゃくちゃわけわかんない状態なんです。

日本語でPythonistaとGitHubの連携を詳しく解説している記事は見つからないし、英語で【how to change git branch on Pythonista】なんていうそれらしいキーワードで検索してみても、問題を解決してくれる記事は見つけられませんでした。

なので、git -hgit branch -hでヘルプを見てみるも解決にいたらず。。。

そんなこんなで、頭の中でクエスチョンマークが飛び交っていますが、ターミナルで使うgitコマンドと、StaSh上でのgitコマンドの使い方にかなり差があることだけはよくわかりました。

ターミナル上で使えるオプションはほとんど使えないと考えた方がよくて、基本的な使い方は同じだけと、全く別物のgitと考えた方が理解しやすいかと思います。

言ってみれば、【穴子】と【うなぎ】みたいなものでしょうか。見た目はほとんど同じだけど、味も住むところも微妙に違うという感じ。

穴子とうなぎ

とりあえず、基本的なコマンドは一緒なので、ある程度理解できれば、ターミナルでもStaShでも使いこなすことができるかと思います。

今回は基本的な使い方を実践してきましたが、コンテンツをステージングエリアから削除したり、commitを変更したり、git管理対象外のコンテンツにしたりと、まだまだ細かい使い方がたくさんあるので、これから実践を交えて少しづつ学習していきたいと思います。

それでは、明日もGood Python!

と言いたいところですが、明日はもしかしたら、Python学習365日チャレンジ達成したので、おやすみするかもしれませんよ〜。