クモのようにコツコツと

フロントエンドエンジニア イイダリョウの技術ブログ。略称「クモコツ」

初めてのPython(インストール〜Hello world)と初めての黒い画面

このところ、データサイエンティストによるデータ分析記事が様々な切り口で興味深々です。どうやら皆さんPythonでプログラミングをしているようです。私もやってみたくなってきました。そこで、PythonのインストールからHello worldまでやってみました。なお、プログラム実行のため「黒い画面(ターミナル)」のコマンドに触れました。苦手だった黒い画面の理解もすすんで一石二鳥だ!!

【目次】:

データ分析にはPythonが向いているらしい

Pythonというと「最先端のイケてる言語」というイメージ。AI、機械学習、高収入、とか。でもなんだか漠然として、まだ自分が手を出す段階ではないなと。手の出し方自体もよくわからなかったし。

ただ、冒頭に書いたようにすごく面白いデータ分析系の記事がたいていPythonで分析されていた。こういうこと自分もやってみたいなーとだんだん興味が湧いてきた。

スクリプト言語四天王

サーバサイドに「スクリプト言語四天王」*1というのがあって調べるうちに違いがわかってきた。

  • Perl:かつてCGIがWebに特化し、一世風靡した。カウンターや掲示板が作られた。
  • Python:人工知能、機械学習だけでなくデータ分析、タスク自動化、Webアプリなど用途が広い
  • PHP:Webに特化。フレームワークはCakePHPが有名。WordPressにも採用されている。
  • Ruby:国産の言語!フレームワークRuby on RailsがWebに特化。

Pythonが人工知能向けというよりも、他の3つがWebメインでPythonは用途が広いんですね。

※参考:Perl、Python、PHP、Rubyについて - Qiita

Perlは今から手を出さなくてもいいかな…と個人的には思っていて、PHPはある程度触れていて、PythonとRubyが未知の世界です。

今はデータ分析に興味があるので先にPythonに挑戦します。体系的に理解するために書籍「Pythonの教科書」を購入しました!

※参考:実践力を身につける Pythonの教科書

Pythonのインストール

Macでは最初から「Python2」がインストールされているのですが、書籍では「Python3」を推奨していたので、インストールしてみる。

プログラミング言語を「インストール」ってどういうこと?と思う方もいるかもしれないが、言語はただ書いただけでは文字列でしかないわけで、その言語を認識して処理を実行する環境が必要です。

その実行環境としての「Python」をPC内にインストールするわけです。

下記のページからファイルをダウンロード。

※参考: Welcome to Python.org

「Downroad Python 3.x.x」ボタンをクリックするとOSに合ったファイルがダウンロードできます。

ダウンロードしたファイル「python.3.x.x〜.pkg」ファイルをWクリック f:id:idr_zz:20181119204543j:plain

指示に従い進んでいくと… f:id:idr_zz:20181119204547j:plain

インストール完了!

黒い画面(ターミナル)を起動!

さあいよいよPythonを書いてみましょう!

Pythonプログラムの実行には「黒い画面」が必要なようです。そう、あの黒い画面ですよ…。

AltJSやらNode.JSやらWebPackやらDockerやら、最近のフロントエンド技術はたいてい黒い画面で実行されていますよね。

それでは、ドキドキしながら黒い画面を開いてみましょう。黒い画面…Windowsでは「コマンドプロンプト」、Macでは「ターミナル」といいます。

「アプリケーション」の中の「ターミナル」を開いてみる。それ! f:id:idr_zz:20181121210023j:plain

ごめん、白かった。「黒い画面」のイメージが強いですが、ターミナルのデフォルトでは「白い画面」ようです。こっちの方が見た目がテキストエディタチックで緊張しないので、このまましらばらく触ってみるw

私はこれまで黒い画面にはそれほど触れることがありませんでした。しかしPythonの体験のために必要とあらば、ここらでがっつり黒い画面を経験してみるのもいいかもしれない。(上記のフロントエンド技術も身近に感じられるかもしれないし)

ちなみに1行目は前回のログイン日時。二行目は操作対象(コンピュータ名、ディレクトリ、ユーザ名)です。最後にあるドル$マークはとても大事な記号。後述しますね!

UNIXコマンドを叩く

さて、ターミナルには「UNIXコマンド」という命令を書いていきます。単に「コマンドを叩く」なんて言い方もされますね。

行の最後にはドル$マークが表示されます。コマンドはこのドル$マークの後に入力します。 f:id:idr_zz:20181119204937j:plain

まず$の後ろにpython3と打ちます。

$ python3

Python3を起動してね、という命令です。エンターで実行! f:id:idr_zz:20181119204941j:plain

Python3が起動されました。 f:id:idr_zz:20181119204948j:plain

一番最後に>>>と表示されています。これはPythonの「REPL(対話実行モード)」と言ってPythonのプログラムをその場で実行し、すぐに結果を表示できます。

REPL(対話実行モード)で四則演算

それではさっそくREPLで四則演算を書いてみます。

1〜9までを掛け算します。(この時点でどのくらいになるのか、文系の私には想像もつきませんw)

>>> 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9

エンターを押して実行です! f:id:idr_zz:20181119211820j:plain

おお!すぐに答えが!「362,880」なんですね! f:id:idr_zz:20181119211958j:plain

実際にターミナルで全てのPythonプログラムを書くのは現実的ではありませんが、ここでPythonの命令が実行できるということはテストやデバッグなどを行えるということです!(JSでよくつかうalert()console.log()のイメージです)

なお、REPL状態を終了させたい場合はexit()を入力します。

>>> exit()

Pythonファイルを作成

次に、Pythonのファイルを作って、その中にPythonの命令を書いてみましょう。ファイルの拡張子は.pyです。

デスクトップにpythonというフォルダを作り、その中にhello.pyというファイルを保存します。(文字コードはいつもとおなじUTF-8にしてください)

中にはいわゆる「Hello world」的なコードを書きます。文字の出力はprint()というメソッドです。

print("はろー、ぱいそん。")

メソッドの後ろにカッコが付くのはJSやPHPと同じですね。引数に文字列はろー、ぱいそん。を入れています。

なお、JSやPHPは行末にセミコロン;が必要ですが、Pythonの行末は不要です。

cdコマンドでPythonフォルダに移動

ふたたびターミナルを起動しましょう。また$のあとにコマンドを書きます。 f:id:idr_zz:20181119212856j:plain

コマンドは結構強烈な略字がたくさんあります。昔は少しでも少ない文字数にしたかったようです。*2

※参考: UNIXコマンドは何の略なのか? - Qiita

たとえばcdは「Change directory」など、まるでDAI語みたいな世界です。

※参考: DAIGOが放つ斬新な略語DAI語録まとめ!爆笑必至50選!!

それではcdコマンドでターミナルの中でhello.pyファイルに移動しましょう。

cd Desktop/pythonでデスクトップ直下のpythonフォルダに移動。

$ cd Desktop/python

エンターで実行! f:id:idr_zz:20181119212928j:plain

最初にチルダ~だったところがpythonになりました。「pthonフォルダに移動したよー」という意味です。ほんとかなー? f:id:idr_zz:20181119213043j:plain

なお、~はホームディレクトリという意味です。

※参考: #チルダ(~)って何を表すの? - Qiita

pwdコマンドでフォルダのパスを確認

cdコマンドでpthonフォルダに移動したようなんですが、画面がテキストだけなので半信半疑。ここら辺が黒い画面のもどかしさです。

pwdコマンドはファイルやフォルダのパスを確認することができます。(pwdってパスワードみたいですが「print working directory」とのこと)

$ pwd

エンターで実行! f:id:idr_zz:20181119213502j:plain

Desktop/pythonと表示された。どうやら信じていいようです! f:id:idr_zz:20181119213554j:plain

lsコマンドでファイル一覧表示

次はlsコマンド。「list directory contents」リストのことですね。

フォルダの中のファイル一覧を表示します。

$ ls

エンターで実行! f:id:idr_zz:20181119214013j:plain

ファイル一覧が表示!一覧といっても1ファイルですが、ちゃんとhello.pyがあるよー、と教えてくれてます。 f:id:idr_zz:20181119214132j:plain

.pyファイルのPythonプログラム実行

さあいよいよ、.pyファイルの中のPythonプログラムを実行します!

python3コマンドのあとにファイル名を指定します。

$ python3 hello.py

エンターで実行! f:id:idr_zz:20181119215213j:plain

おお!さきほどhello.pyの中でかいた文字列はろー、ぱいそん。が表示されました! f:id:idr_zz:20181119215314j:plain

ファイルの中のprint()メソッドが動いて結果がターミナルに表示されたということです。

黒い画面はコマンドの実行、出力ができる場所

これまで、黒い画面はあまり触らなかったので、どういう存在なのかいまいちわかってなかったんですが、これはコマンド(命令)を書いてその場で出力結果を得られる場所なんですね。

例えば. jsファイルの命令→実行→出力はブラウザがメインですがコンソールやアラートにも出力可能です。

//jsファイル→ブラウザに出力
document.querySelector("#hoge").innerHTML = "はろー、じぇいえす。";

//jsファイル→コンソールに出力
console.log("はろー、じぇいえす。");

//jsファイル→アラートに出力
alert("はろー、じぇいえす。");

今回行ったのは.pyファイルの命令→実行→ターミナルに出力です。

.pyファイルの命令を

print("はろー、ぱいそん。")

ターミナルにコマンドで実行

$ python3 hello.py

ターミナルに出力

はろー、ぱいそん。

そう考えると、普段やっていることと出力場所が変わっただけでたいして変わりませんね!

CUIを使う理由は環境を超えるため

ターミナルやコマンドプロンプトは「CUI」といいます。WindowやMacのOS自体は「GUI」です。

MacやWindowsが出る前のコンピュータといてば、マウスもなくキーボードだけで黒い画面にコマンドを打って操作をするCUIが普通でした。

ウィンドウのフォルダやファイルをドラッグしたりコピペしたり、GUIで直感的な操作をしていると現代では、CUIはとてもわかりにくく感じます。それでもCUIを使うメリットって何でしょうか?

  • CUI(Character User Interface):テキストのコマンドだけでコンピュータの全てを操作
  • GUI(Graphical User Interface):マウスでウィンドウ、ファイル、フォルダを操作できる

私たちのPCは1台ごとにモニター、キーボードなど入力、出力機器がセットになっています。PCのローカル環境で操作をするにはGUIで問題ありません。

一方、サーバはWebサーバ、メールサーバ、DBサーバ、FTPサーバなど複数のハードを操作します。サーバは本体のみでモニター、キーボードなどが付いてないことが多いです。*3

そういった環境では遠隔のマシーンからサーバーにアクセスしてCUIで操作する方が使い勝手がよくなるんだな、と理解しました。

  • PC:1台ごとにモニター、キーボードが付いている=GUIでOK
  • サーバ:複数台のサーバで本体のみ=CUIで遠隔からアクセスして操作する

そしてCUIはPCローカルでもいろんな実行環境を超えてファイルやフォルダにアクセス、操作ができる。それがCUIを使う理由かな、とイメージできました。

  • 黒い画面で複数のサーバマシンを超えて遠隔操作できる
  • 黒い画面でnode.js、python、rubyなどの実行環境を超えて操作できる

最後に

Pythonに触れることで、副次的に黒い画面(白かったけどw)のUNIXコマンドの理解も深まりました。ターミナルを利用する別の技術にも入りやすくなる気がします。node.jsやRubyなどをやっていきたいですね。

Pythonについても進めていきます。以前、JSとPHPの書式を比較した記事を書きました。次回はこれと同じような比較記事を書きます!

※参考: PHPの基本を理解するためにJSと比較する - クモのようにコツコツと


※参考:Web開発環境の記事まとめ
qiita.com

*1:ちなみにJSはフロントエンドのスクリプト言語

*2:HTMLでも歴史が古い要素は文字数が少ないですね。h1、p、aなど

*3:ついていたとしてもバラバラの場所にある可能性もあります