PyCharmを使ってみよう
- ダウンロード
- 公式サイト -> Download -> Community版 (173MB)をダウンロード。
- インストール
- ダウンロードしたdmgファイルをダブルクリック。
- 「アプリケーション」フォルダに、ドラッグ&ドロップ。
- アプリの起動
- 「アプリケーション」フォルダにある「PyCharm CE」を実行。
- 初期設定
- Pythonインタプリタの設定
- PyCharm CEが起動したら、左上のPyCharmメニューから「Preferences...」を選択。
- 左の「Project Interpreter」を選択。
- 右上の「...」を選択し、「Add Local」を選択。
- 「/usr/bin/python」と書かれている箇所を削除し、
/opt/homebrew/bin/python3
を選択。
- 一番上までスクロールし、
/
が見えたらそれをダブルクリック。
/
から、/opt/
-> /opt/homebrew/
-> /opt/homebrew/bin/
-> /opt/homebrew/bin/python3
と辿っていく。
- 右下の
OK
を選択。
- バージョン管理ツールの設定
- PyCharm CEが起動したら、左上のPyCharmメニューから「Preferences...」を選択。
- 左の「Version Control」を展開し、その中にある「Mercurial」を選択。
- 右上の「Path to hg executable」欄の右にある「...」を選択する。
/
から辿り、/opt/homebrew/bin/hg
を選択。
- PyCharmで利用するディレクトリを用意
- ターミナルを起動し、
mkdir PycharmProjects
を実行。
- 全体の流れ
- 新しくプロジェクトを作る場合
- 「New Project」を選択し、プロジェクト名をつけて実行。
- 必要に応じてエディタ機能や通常実行・デバッグ実行・ユニットテスト実行して開発。
- 既存プロジェクトを取り込む場合(今回はこっち)
- バージョン管理されてるプロジェクトなら、Mercurial, Git 等の管理ツール名を選択し、リポジトリのクローンを作成する。
- クローンに対して、エディタ機能や通常実行・デバッグ実行・ユニットテスト実行して開発。
- リポジトリからクローンを作成。
- tic_tac_toe.pyは学科のMercurialでバージョン管理されている。
- クローンの作成手順
Check out from Version Control
を選択。
Mercurial
を選択。
- 「Mercurial Repository URL」に次のURLをコピペ。
http://www.ie.u-ryukyu.ac.jp/hg/teacher/index.cgi/home/hg/teacher/tnal/2016_prog1/
- 右側の「Test」を選択し、Test Connectionが成功することを確認しよう。失敗したら、URLのコピペミス。
- 「Parent Directory」を確認。
- デフォルトで、ホームディレクトリの下に PycharmProjects を作成される。今回はこのままでOK。
- 「Directory Name」に「pycharm_example」を入力。
- Test Connectionが成功したら、右下の「Clone」を選択。
- 「Checkout from Version Control」で、クローン作成するか確認されるので
Yes
を選択。
- Tipsウィンドウはひとまず閉じる。
- 起動する度に異なるヒントが出てくるので、使い慣れてないうちは表示される内容を読んでみよう。
- クローン直後のウィンドウで、tic_tac_toe.pyを開いててみる。
- ウィンドウ解説
- 左側: Finder代わり。ファイルやディレクトリを参照したり、右クリック(Ctrl+クリック)でFinder操作が可能。
- 中央: ファイルをダブルクリックすると、その中身が中央に表示される。
- .idea/vsc.xml というファイルをバージョン管理下に置くか否かを聞かれるが、(a)「Remember, don't ask again」にチェックを入れて、(b)「No」を選択。
- エディタとしての機能
- [可視性の調整] ソースコードの左側に「白い□」があるが、これはコードを読みやすくするための機能。白い□をクリックすると、そのブロックを一時的に隠す(collapse)ことができる。もう一度クリックすると表示(expand)できる。これを切り替えることで、コード全体の可視性を調整できる。隠している状態で、そこにカーソルを当てると中身を一時的に参照できる。
- 最小の状態(可能な限り隠した状態)にするなら、Code->Folding->
Collapse All
を選択。
- 最大の状態(全て開いた状態)にするなら、Code->Folding->
Expande All
を選択。
- [ドキュメント参照]
- ドキュメントを読みたいモジュールや関数を選択する。ここでは例として「import random」の「random」を選択。(ダブルクリックして、randomを囲ってる状態にする)
- 画面上部のViewメニューから、
Quick Documentation (F1)
を選択すると、ドキュメントを参照できる。ショートカットキー「F1」は、「fnキーを押しながらF1キー」のこと。
- もしくは、
External Documentation (Shift+F1)
を選択すると、公式ドキュメントを参照できる。
- [変数参照] 使用されてる変数等がどのように使われてるかをハイライト表示する。
- 例えば、init_board()における最初のコード「board = []」のboardを選択しよう。
- 選択した変数はピンクになり、その変数が利用されている箇所がブルー表示になる。
実行してみる(通常の実行)。
- (case 1) 通常の実行(python3 tic_tac_toe.py)をしてみる。
Run
メニューからRun
を選択し、更に1. tic_tac_toe
を選択。
- 実行結果が画面下に出力される。今回の例では「実行した」という結果しか出力されない。
実行してみる(デバッグ実行)。
- (準備)サンプルソースはそのままだと何も出力しないので、出力するようにソースを修正。
- 一番最後のif文の前に「test_play()」を追加。
- Runして、test_play()が実行されることを確認。
- (case 2) デバッグ実行をしてみよう。
- シンプルなデバッグ実行
- ソースを修正した状態で、記述した「test_play()」の左側(灰色の空間)をクリック。一度クリックすると赤丸が付き、もう一度クリックすると赤丸が消える。この赤丸をブレークポイント(break point)と呼ぶ。
- ブレークポイントをつけた状態で、Runメニューから「
Debug 'tic_tac_toe'
」を選択。
- デバッグモードで実行すると、ブレークポイントが見つかると、その行を実行する直前で、処理を一時的に中断する。
- 画面下には中断した時点でのスタックフレームが表示されている。この時点で読み取れる情報は次の通り。
- スタックフレームがmodule(トップレベルのスタック)であること。
- gather_empty_cells, init_board, point_random, print_board, test_play というfunctions(関数)が登録されていること。
- randomというmodule(モジュール)が登録されていること。
- この時点では処理を中断しているだけなので、処理を続けることもできる。処理を続けるには、画面下の上メニューにある矢印があれこれ書かれているボタンを使い分けます。続け方は大別して次の3種類。
- step over: 次の行に移動する。
- step into: その行で実行している関数に移動する。(関数ではないなら、単に次の行に移動する)
- step out: その行を含む関数を呼び出しているところまで移動する。
- ここでは、test_play()関数の中に移動するために「step into」を1度実行しよう。実行した時点で読み取れるのは次の通り。
- 関数の中に移動したので、スタックフレームが「module」から「test_play」に積み上がっている。
- test_playの1行目が青になっている。(青い場所=次に実行される場所)
- この状態でもう一度 step into をすると、init_board の中に移動する。試しに step into してみよう。実行した時点で読み取れるのは次の通り。
- 関数の中に移動したので、スタックフレームが「test_play」から「init_board」に積み上がっている。
- init_boardの1行めが青になっている。
- この状態で step into しても、次に実行される行は関数ではないため、次の行に移動する。試しに step intoしよう。
- そのまま step into を何度か繰り返し、while文の中に入ろう。while文の中で、同様に step into を実行し続けると、その前に定義した変数boardやindexがどのように更新されるかを確認しながら、1行ずつ実行することができる。
- 同様に、変数にカーソルを当てると、その変数の現在の中身を確認することができる。また、画面下部には現在のスコープにある変数名と、その中身が出力されている。
- init_boardの処理を終えたい(最後まで飛ばしたい)なら、step outする。
- step outすると、先ほど実行途中だったtest_play()に戻る。ここでstep intoすると、先程と同様に1行ずつ処理していく過程を確認することができる。
- 細かいデバッグ指定 (Condition指定)の例。
- 例: init_board() のwhile文で、indexが8になった状態で止めたい。
- while文の中で止めたいコード行の左にブレークポイント(赤丸)を設定。ここではboard.append('e')に設定しよう。
- ブレークポイントを追加したら、赤丸を右クリック(Ctrl+クリック)。
- Conditionに
index == 8
を記入。ここで指定した条件の時だけ中断するようになる。
- 動作確認
- デバッグ実行(RunメニュからDebugを選択して実行)
- 最初に設定したブレークポイント test_play() で一時中断される。この状態でstep overすると、関数の中には移動せずに次の行に移動する。しかし、その途中でブレークポイントが見つかったらそこで自動停止する。試しにstep over実行してみよう。
- 先ほどと異なり、既にwhile文の中に入っている状態で、かつ、index==8まで処理が進んだところで中断されていることが確認できるはず。
- デバッグ実行のまとめ
- 想定通りに処理されない場合には、ブレークポイントで処理を止めたい場所を指定し、デバッグ実行する。
- 中断した箇所からstep over, step into, step outを使い分けることで、処理の中身を確認することができる。
実行してみる(ユニットテストの実行)。
- (case 3) doctestを実行してみる。
Run
メニューからRun
を選択し、更に2. Doctests in tic_tac_toe
を選択。
- 実行結果が画面下に出力される。今回の例では「All Tests Passed」という出力とともにグリーンが出力される。
- 失敗するとどうなるかを確認するため、試しに、レポート課題2の最初の状態(init_board()のwhile文中で失敗する状態)に修正。
- 「while (index<9):」を「while (index<=9):」に修正。
- もう一度 doctestを実行してみると、テストが失敗した箇所だけが画面下に出力される。
- テストが失敗している状態では、「どこで失敗したか」を左下で確認できる。(成功したテストは出てこない)。具体的にどう失敗したのかを右下で確認できる。
- この状態で左下の「どこで失敗したか」を一つ選択してみよう。例えば「tic_tac_toe.init_board」をダブルクリックすると、該当ユニットにおけるどのテストが失敗したかが出てくる。ここでは「print(board)」が失敗したらしい。ここから更にprint(board)をダブルクリックすると、上部中央のソースコードで、該当箇所に飛ぶことができる。
- ユニットテスト実行のまとめ
- テストが失敗するとレッド表示になる。
- 失敗した箇所をダブルクリックすることで、該当箇所に飛ぶことができる。
- テストが通るようにコードを修正できたらグリーン表示になる。