paiza向け Python開発環境構築手順（Eclipse）（Windows）

## 対象
　これからプログラミングを学びたい、けど何からやればいいかわからない。
　そういう人はまず「動かす場所を用意」して「動いているところを見る」のがいいと思う。
　この記事は「[paiza](https://paiza.jp/)で問題を解く」ことを前提に、「Pythonのソースファイルを動かす」ことをゴールとして書く。paizaが目的でなければ適宜読み替えてほしい。Eclipseを選んでいる理由は「まとまってて導入が簡単」「実行するのが簡単」「日本語で使える」という点。
　標準入力への値の設定方法だけ確認する場合、[ソース解説](#ソース解説)だけ見てもらえばいい。

　**環境**
　・Windows10
　・Eclipse2021
　・Python3.9.5



## 目次
　1. [下準備](#下準備)
　2. [ダウンロード](#ダウンロード)
　3. [インストール](#インストール)
　4. [プロジェクト作成](#プロジェクト作成)
　5. [動作確認](#動作確認)
　6. [ソース解説](#ソース解説)
　7. [おわり](#おわり)



## 下準備
　これから作業するフォルダを作っておく。
　どんな名前でもいいが「半角文字」で「わかりやすく」しておこう。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/0067afdc-404c-caa1-d039-2cbbda5d559c.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/04de4d4e-6a93-61e8-4b00-2b263c92e78b.png">



## ダウンロード
　下記3つのものをダウンロードする。
　　・7zip（持っていれば不要）
　　・Eclipse
　　・get-pip

　「eclipse」で検索すればだいたいトップに来る。「Java」と書かれているがPython版も同じページにあるので問題ない。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/923cb349-b319-827b-2865-3e7d30975504.jpeg">

　特にこだわりがなければ、最新版でいいだろう。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/eeb5d71b-f001-4c78-aec8-138090bbb663.jpeg">

　移動先の最初に7zipへのリンクがある。
　必要があれば新しいタブで開いておこう。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/6493f3b1-1af9-a958-149d-73ce4f1617bc.jpeg">

　少し下にスクロールすると様々なバージョンのダウンロードリンクがある。
　今回はPythonのWindows、Full Editionを選ぶ。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/024f13e4-20e3-f5de-b026-269af4631ef2.jpeg">

　7zipの方はこんな感じ。自分の環境にあったものを選ぼう。わからなければ一番上で。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/81ef338e-1811-4ca3-cc9d-93851fcb7325.png">

　最後にget-pipだが、手順上後回しにしてもいい。
　eclipse本体の解凍にそこそこ時間がかかるため。→[いったん飛ばす](#インストール)

###### get-pip
　「get pip python」で検索すると上の方に来ると思う。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/96263512-fb64-1966-b7f9-fa556f8590c6.jpeg">

　ページの中ほどに「get-pip.py」の項目があるので、リンクから保存する。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/7b62bdb2-e84c-f3dd-e68a-acd5ffa044e5.jpeg">



## インストール
　以下の手順で行う。
　　1. 7zipをインストール
　　2. Eclipse(pleiades)を解凍
　　3. pipをインストール 

　まず7zipをインストールする。
　ダウンロードした7zipのファイルをダブルクリックすればいい。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/b1307184-a804-faaa-0ac9-1082d2af1f1d.png">
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/ccf5778e-23d5-521f-061e-a28961cbb512.png">
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/18a1d704-2556-c4f5-45a6-74d0b6fd0184.png">

　7zipをインストールすると、右クリックから「7zip」が選べるようになる。
　ダウンロードしたEclipse(pleiades～)の圧縮ファイルを右クリックして、
　7zip -> 展開…　を選ぶ。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/2b8e2b21-1e51-cf82-3998-45d8f6659221.jpeg">

　ウィンドウが出てくるので、好きなフォルダを選んで解凍する。
　ここでは最初に作ったPythonフォルダを選んでいる。
　※2段目のテキストは作成フォルダ名だが、短くしておいてもいい。実際後で短くした。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/2e00e79c-8da3-220d-00fe-059210daeb5b.png">

　OKを選ぶと解凍が始まる。これが結構時間がかかる（10分くらい）。
　そのため飛ばした人はここでpipをダウンロードしよう。[pipダウンロード](#get-pip)

　解凍が終わればEclipse自体のインストールは完了。もう使えるのだが、Windows環境だとなぜかpipが使えないままらしい。先にpipをインストールする。

<details><summary>pipとは？</summary><div>
　Pythonのパッケージを管理するためのツール。
　簡単に言うと「追加機能を入れるための機能」である。
　Eclipseではこれを簡単に呼び出せる機能があるが、肝心のpipそのものが抜けてしまっている。
</div></details>

　ダウンロードした「get-pip.py」をpython/3フォルダにコピーする。
　[解凍フォルダ/pleiades/python/3/]
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/0b3711db-a53b-e999-288d-006121404fa1.jpeg">

　コマンドプロンプトを起動して、python/3フォルダに移動する。
　`cd [get-pip.pyを置いたフォルダ]`
　確認のためdirコマンドを打ち**python.exe**と**get-pip.py**があることを確認する。
　`dir`
　そして下記コマンドを実行する。
　`python.exe get-pip.py`
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/703cf135-7c68-1abf-9ca1-b2affb87b1b6.jpeg">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/ce2792ff-7258-fb88-af34-8c0be69555da.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/49187b17-e68e-b416-5618-e4ec51284e98.png">

　インストールが終わると「Successfully」が表示される。
　表示されている警告は「環境変数にないけどいいのか？」という意味。Eclipse上でしかPythonを使わないのであれば特に問題はない。

　これでインストールは完了。



## プロジェクト作成
　これからはEclipse内での作業になる。
　Eclipseは[解凍フォルダ/pleiades/eclipse]フォルダの中にある。
　毎回開くのでショートカットをどこかに作っておくといいだろう。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/44c2f7ec-efff-9efb-ecbd-0667c0afc912.png">

　初回のみコマンドプロンプトが立ち上がるので、何かキーを押して終了させる（エンターキーとか）。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/a5de2659-d78c-5724-9429-6da12826d1bc.png">

　Eclipseは開くときにワークスペース（作業の保存場所）を聞いてくる。
　Eclipseで作業したものはすべてそこに保存されるので、わかりやすい場所を選ぶ。
　せっかくなのでここでは[paiza]というフォルダを作りそれを選ぶ。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/4395dd46-a8d3-80f3-ba7a-3a2eba46de32.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/ec24563a-85c0-af89-f919-b86550b52d13.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/3eb23148-721d-ebe5-3123-e9d70c93523a.png">

　初回の起動でPythonの更新を聞かれる。適用するを選ぶ。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/df06a163-c68d-e92f-4fe0-0bee0011879c.jpeg">

　Eclipseが起動したら、pipが適用されていることを確認する。
　上のメニューバーから[ウィンドウ]＞[設定]を選び、
　[PyDev]＞[インタープリター]＞[Pythonインタープリター]を選び、pipが表示されていることを確認する。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/490c2690-4b0d-c5c3-544a-59685d02a022.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/b3f41a63-c0c2-3a36-af17-28537011502a.png">

　いよいよプロジェクトを作っていく。左側のパッケージエクスプローラーで右クリック
　[新規]＞[プロジェクト]を選択。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/cc12df78-02df-7553-e271-a82d79fda2af.png">

　汎用的なPythonプロジェクトを作る。
　[PyDev]＞[PyDevプロジェクト]を選び[次へ]を選択。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/d2ccc793-0573-e0b8-194a-6f5a2162feea.png">

　プロジェクト名を「paiza」にして、srcフォルダ作成を選択。（自由）
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/402a1357-9adc-e402-2e9a-7844c24cd8ad.jpeg">

　完了を押すとpaizaフォルダとsrcフォルダが作られる。
　この中でソースコードを作っていく。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/baa73e60-64c0-b925-36e0-a74bc6fe122f.png">

　ソースファイルはすべてsrcフォルダの中、それ以外のファイルはsrcフォルダの外で管理するのが基本。
　srcフォルダの中でフォルダ分けしたいときは[PyDevパッケージ]（フォルダ）を作る。その中に[PyDevモジュール]（ソースファイル）を作成する。
　テキストファイルなどソース以外のものを作るときは[フォルダー][ファイル]を選ぶ。
　右クリックでフォルダー・パッケージを選んでいると、その中に指定したものが作られる。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/01bafc2b-9784-5e8c-e114-4b17cc6c01da.png">

　最初に作るとき設定の確認が出るが、デフォルトでOKでいい。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/a6c8f90d-87fe-7912-5a82-31945c9df895.png">

　[PyDevモジュール]を作成したときは「モジュール：メイン」を選ぶ。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/4698f564-dc3b-c23a-9aa7-80f623208332.png">


　サンプルとして以下のようなフォルダ構成とする。

```
paiza
  ┣ src
  ┃   ┣ callSkillcheckMethod.py
  ┃   ┗ skillCheck
  ┃       ┗ rankC
  ┃           ┗ sample.py
  ┗ data
      ┗ input
          ┗ skillCheckData
```

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/4e7a0454-22bf-e0a7-60dd-e3c6bf121a77.png">
※`__init__.py`は自動で作成されるはず。




## 動作確認
　実際に動かしてみる。
　まず動くものを作らないといけない。
　[sample.py]と[callSkillcheckMethod.py]を以下のように作る。

```python:sample.py
def main():
    input_line = int( input() )
    for _ in range( input_line ):
        s = input().rstrip().split( ' ' )
        print( "hello = " + s[0] + " , world = " + s[1] )

if __name__ == '__main__':
    main()
```

```python:callSkillcheckMethod.py
import sys
import time

from skillCheck.rankC import sample as target


def main():
    f = open( '../../data/input/skillCheckData', 'r' )
    sys.stdin = f

    # 処理前の時刻
    t1 = time.time() * 1000

    print( "===================== start =====================" )
    target.main()
    print( "=====================  end  =====================" )
    # 処理後の時刻
    t2 = time.time() * 1000
    # 経過時間を表示
    elapsed_time = int( t2 - t1 )
    print( f"経過時間：{elapsed_time} ms" )


if __name__ == '__main__':
    main()

```

　sample.pyは[paizaのサンプルコード](https://paiza.jp/guide/samplecode)。
　データの方にサンプルの入力値を設定する。

```:skillCheckData
2
2 5
3 4
```

　保存したら実行してみる。
　実行はパッケージエクスプローラーから[callSkillcheckMethod.py]を右クリック、「[実行]＞[Python実行]」を選ぶ。
　ウィンドウ下部にコンソールが出てきて、実行結果が表示されるはず。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605465/cb2f3284-a3ac-4294-54d2-cd9ce5dd3fe6.png">

　実行の方法は記録として残るため、2回目以降の実行は上部アイコンの緑色の三角を押せば[callSkillcheckMethod.py]が実行される。
　新しい問題に挑戦するときは[sample.py]と同じように新しくファイルを作って保存。[callSkillcheckMethod.py]のインポートだけ直せば、同じように実行して新しい方が呼び出される。

```python:callSkillcheckMethod.py
from [新しいソースのパッケージ] import [新しいソース] as target
```



## ソース解説
　[callSkillcheckMethod.py]の中身について軽く触れておく。

```python:callSkillcheckMethod.py
from skillCheck.rankC import sample as target
```

　`import`で自分で作ったソースコードを読み取ることができる。
　`from`はどこのパッケージから読み取るかを指定している。”.”でフォルダの区切りを表していて、既定の場所を始点にしている。プロジェクト作成の時「srcフォルダを作ってPATHに加える」を選んでいるので、始点としてsrcフォルダを使うことができる。
　`as`はインポートしたものを使うときの名前を指定する。これによりどんな名前のものをインポートしても"target"として使うことができる。

```python:callSkillcheckMethod.py
    f = open( '../../data/input/skillCheckData', 'r' )
    sys.stdin = f
```

　テキストファイルを読み込んで標準入力に設定している。
　`open('ファイル名', '実行モード')`でファイルを指定して読み込んでいる。実行モードは省略可能。
　`sys.stdin`で標準入力を表している。ここに読み込んだファイル`f`を設定することで、あたかも標準入力で値が渡されたようにしている。

```python:callSkillcheckMethod.py
    target.main()
```

　`target`はインポートした自作の処理。`target.main()`でそのメイン関数を実行している。コンソールは共通なので、`target`の出力もコンソールに表示される。

```python:callSkillcheckMethod.py
    # 処理前の時刻
    t1 = time.time() * 1000
    
    # 処理後の時刻
    t2 = time.time() * 1000
    # 経過時間を表示
    elapsed_time = int( t2 - t1 )
    print( f"経過時間：{elapsed_time} ms" )
```

　`time.time()`は現在時刻を’秒’を整数として取得する。×1000をしているのでミリ秒として変数に保存している。
　処理前と処理後に現在時刻を取ることで、引き算で経過時間を取得することができる。
　`print(f"...{変数名}...")`でprintで表示する文字列中に変数を割り込ませることができる。

```python:callSkillcheckMethod.py
if __name__ == '__main__':
    main()
```

　この2行はなくてもエラーにはならない。が、消すと何もしなくなる。
　Pythonはファイルを指定して実行されると、ファイルの1行目から順番に処理をしていく。それはインポート時に読み込んだタイミングでも起動されるようになっている。
　そのため、むやみな実行を回避するために処理をすべて`def`の中に書き（関数化し）、読み込み時には全部スキップさせ最後に`if`で「もし”main”として呼ばれていたら」という条件にすることで、「これは自分が呼び出された」という意味にして判断させている。



## おわり
　テキストファイルを入力として、何度も処理を実行するのが手間だったため、1つ呼出用の処理を作ることで手間を軽減させた。別にやろうと思えば実行の構成から入力ファイルを設定して対象のファイルを直接実行することもできる。だが修正が面倒なため（構成画面を開かないといけない）この方法に行きついた。
　プログラミング学習では処理の動きを実際に見ることが重要。paizaに関していえば〇か×かの判定だけではなく、値を変えた時どのタイミングで何が起きているのか、気になる部分にprint関数を仕込んで、コンソールで見てみると理解が深まる。
　以上です。

　・[Javaでのpaizaテストツール](https://qiita.com/hujinori/items/668f4a5ca39f9c52f218)