近年、プログラミング言語の世界において、汎用性の高さや学びやすさといった観点から“Python(パイソン)”という言語の人気が高まっています。
2019年には、オープンソースでのソフトウェア開発において事実上のスタンダードともいえるWEBサービス“GitHub”で使われているプログラミング言語のランキングで2位を獲得するなど、名実ともに人気プログラミング言語の座を手に入れたといってよいでしょう。
本記事では、人気、注目度ともに高いPythonについて興味を持ち始めた人に向けて、簡単な概要から使用用途や基本構文、オススメの学習サービスなど、学習の最初の一歩となる部分を解説していこうと思います。
Pythonとは?
Pythonは1990年代初頭ごろから公開されているプログラミング言語です。
制作者はオランダ人のグイド・ヴァンロッサムで、名称は英国放送協会(BBC)制作のコメディ番組『空飛ぶモンティ・パイソン』にちなんでつけられました。
Pythonの意味は“ニシキヘビ”で、アイコンにもニシキヘビのイラストが用いられています。
Pythonはプログラムの“読みやすさ・わかりやすさ”が重視されています。
実例として、少ないコードで簡潔に書けるようになっており、比較的読みやすく、読み間違えや書き間違えが起こりづらくなっています。
また、汎用のプログラミング言語であり“何ができない”ということがないため、実用的な言語として広く使われ続けています。
Pythonは、AI(人工知能)や深層学習の分野の他、データ解析の分野で広く使われていることから、注目度が高いプログラミング言語でもあります。
日経×TECHが2018年10月に実施した“プログラミング言語実態調査”における“今後スキルを磨きたい言語は何か”という質問では、もっとも多い回答を獲得しています。
さらに、2020年度より日本の国家資格である基本情報技術者試験で出題されるプログラミング言語にも追加されました。
なお、2020年7月21日時点では、Python 3.8.5が最新バージョンとなっています。
Pythonの使用用途
前述した通り、Pythonは汎用的なプログラミング言語で、適応範囲はデータサイエンス、WEBプログラミング、GUIベースのアプリケーション、CAD、3Dモデリング、数式処理など幅広い分野におよんでいます。
また、全世界で使われているため、ある程度の規模の企業ならばPythonをまったく利用していないというケースはほぼないでしょう。
科学技術計算
本言語はC言語のような高速な科学技術計算が得意な言語ではありませんが、C言語で開発された高速な処理を組み込んで利用できるように拡張可能となっています。
これにより、プログラミングが専門ではない研究者でも科学技術計算を実行できるようになります。
また、Pythonでの科学的研究をサポートするツールとして、Jupyter NotebookというWEBアプリケーションが存在します。
文章や実行可能なプログラム、実行結果のグラフなどを1つのドキュメントにまとめて管理可能で、プログラムを対話的に修正・実行して結果を保存できるため、調査・研究に必要な試行錯誤に最適です。
データサイエンス
Pythonの科学技術計算環境はデータサイエンス分野でも広く活用されており、JetBrainsとPythonソフトウェア財団による共同調査(2017年10月)における、もっとも主要な用途に関するアンケートでは27%がデータサイエンス(うちデータ解析18%、機械学習9%)となっています。
特に、機械学習関連ではGoogleのTensorFlowやFacebookのPyTorchなどの主要パッケージはPythonを利用したものが中心となっており、機械学習を学ぶにはPythonの知識が必須と言える状態となっています。
WEBアプリケーション
Pythonは、WEBアプリケーションの開発用途にも多く使われています。
WEBアプリケーションはブラウザから利用できるアプリケーション・サービスのことで、クライアント側のブラウザとサーバ側のアプリケーションサーバーなどのプログラムが通信を行うことでサービスが実現されます。
Pythonは、WEBアプリケーションの開発をサポートするために設計されたフレームワークが充実しており、JetBrainsとPythonソフトウェア財団による共同調査(2017年10月)では、26%がPythonの主要な用途としてWeb開発を選んでいます。
教育
Pythonは教育目的で設計された言語ではありませんが、“読みやすさ・わかりやすさ”が重視されており比較的読みやすいという点から、子どもが最初に学ぶプログラミング教育用の言語としても利用されています。
前述のとおり、2020年度より日本の国家資格である基本情報技術者試験で出題されるプログラミング言語に追加された他、日本の高等学校情報科“情報I”の教員向け研修教材でも、プログラミング用言語としてPythonが使用されています。
Pythonを使用するメリットとデメリット
メリット
1:シンプルな構文
Pythonはシンプルであることを重要視しており、ティム・ピータースさんが記述したプログラミングにおける指針になる戒律のようなものである“The Zen of Python”には、シンプルでわかりやすいこと、ある動作の方法は基本的に1通りとなることが書かれています。
この指針により、Pythonは覚えるべき構文規則が他の言語と比べて少なくなっており、入門者でもハードルが低く始めやすい言語となっています。
また、シンプルな構文により読みやすく、書きやすい言語となっているため、コード作成時の個人差が表れにくくなっています。
これにより、プログラムのソースコードが制作者以外にとって解読困難となる“スパゲティコード”を防ぐことができるだけでなく、初心者でもベテランの記述したコードを読んで学習することができるのです。
その他にも、Pythonにはコードを読みやすくするための記述ルールの1つとして“オフサイドルール”というものがあります。
本ルールは行の始まりをインデント(字下げ)して文の塊を表すというもので、入れ子構造が深くなるにつれて文が右側に書かれる(インデントで左側にスペースが開く)ようになるので、直感的に入れ子構造を理解できます。
2:豊富なライブラリ
ライブラリは、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものです。
Pythonには“電池付属(Battery Included)”という思想があり、プログラマがすぐに使えるようなライブラリや統合環境をあらかじめディストリビューションに含まれています。
ライブラリとして作成されているものは自分のプログラムに組み込めるため、上手く活用することで効率的にプログラムの作成を進められます。
Pythonは、数万に上るほどの豊富なライブラリが公開されており、プログラミングしやすい環境が整っています。
代表的なライブラリその1:NumPy.
NumPyは科学計算・数値計算を行う際によく使われる、行列計算を高速に行うためのライブラリです。
Python自体は実行速度が遅いのですが、NumPyではよく使う行列計算をCやFortranで実装することにより、手軽に高速な行列演算ができるようになっています。
その他の数値計算ライブラリからも頻繁に利用されており、デファクトスタンダードとなっています。
代表的なライブラリその2:Scikit-learn
Scikit-learnは、サポートベクトルマシンや回帰分析などのさまざまな機械学習のパッケージをまとめたライブラリです。
身近な例としては、迷惑メールを拒否したり転送したりする“スパムメールフィルタリング”におけるフィルタリング処理を行う際などで役立ちます。
代表的なライブラリその3:Flask
WEBアプリケーション作成の軽量ライブラリです。
Pythonには、後述するDjangoというWEBアプリケーションフレームワークが存在していますが、こちらは手軽に使うことができ、中小規模のアプリ作成に向いています。
少ないコーディング量でWebアプリを作成可能で初心者に最適です。
3:エラーの発見・修正が容易
プログラミング言語はコンピュータが直接理解できる言葉ではないため、何らかの方法で機械の言葉に変換する必要があります。
変換するタイミングは大きく分けて2つあり、プログラミング言語の命令を1つずつ機械語に解釈しながら実行する方式をインタープリタ型、ソースプログラムをいったん機械語に翻訳し、その機械語になったプログラムを実行する方式をコンパイラ型と呼びます。
Pythonは、インタープリタ型のプログラミング言語となっています。
インタープリタ方式はプログラムの実行と同時にコードを読み込むため、あらかじめソースプログラムを機械語に翻訳しておく必要がなく、エラーの確認も容易となっています。
また、プログラムを1命令ずつ変換して実行するため、動きを確認しながらコードを記述できる他、エラーの発生箇所を特定しやすくなっています。
デメリット
1:実行速度はコンパイラ型に劣る
Pythonは、プログラミング言語の命令を1つずつ機械語に解釈しながら実行するインタープリタ方式のプログラミング言語であることは前述した通りです。
インタープリタ方式はプログラムを1命令ずつ変換して実行するため、エラーの発見・修正が容易である反面、実行速度はコンパイラ型に劣るというデメリットがあります。
特に、1命令ずつ変換しながら実行する都合上、プログラム中の何度も実行されるような部分は何度も解釈されるので、その無駄も無視できません。
このデメリットから、企業の基幹システムや大規模システム開発、処理速度の速さが必要なゲーム開発などには不向きとなっています。
2:エラーが生じやすい
Pythonは記述ルールの1つである“オフサイドルール”によりコードが読みやすくなっていますが、同時に本ルールによってエラーも生じやすくなっています。
機械はインデントに使われる空白の数が同じものを1つのまとまりとして認識しているため、インデントの位置(左側の空白の数)を間違えてしまうと機械が正しく文の塊を把握できず、エラーが発生してしまうのです。
そのため、Pythonのコードを記述する際は、他のプログラミング言語よりも空白の数について注意しておく必要があります。
Pythonの基本構文
文字列
まずは、Pythonにおけるテキストの表示方法を、伝統的にプログラミング言語を初心者に紹介するために使われるプログラム“Hello world”の例で紹介します。
Pythonで文字や数値を表示する場合はprint()関数の“()”の中に記述する必要があります。
また、文字列はさらにシングルクォーテーション(')かダブルクォーテーション(")で囲みます。
ここまでの説明を踏まえて、“Hello World”を表示するプログラムを記述すると、下記のようになります。
============カコミ============
print(“Hello World”)
============カコミ============
構文の比較対象として、C言語で同じことをする場合は下記のような文章になります。
C言語では複数の行にわたって記述を行う必要があることから、Pythonの構文は非常にシンプルであることがうかがえます。
============カコミ============
#include <stdio.h>
int main() {
printf(“Hello Worldn”);
return 0;
}
============カコミ============
コメント
コードの中にはコメントを書くことができ、行頭に“#”と書くことで行末までがコメントとみなされます。
コメントはコード実行時にはすべて無視されるので、コードに関するメモとして活用しましょう。
============カコミ============
print(“Hello World”) # この部分はコメントとなるため実行されません。
============カコミ============
数値
Pythonで数値を扱う場合は、print()関数の“()”の中に記述する部分までは文字列と同じですが、クォーテーションは使用しません(文字列として処理されてしまうため)。
+、-、*、/、%の記号を使用することで、四則演算を行うこともできます。
下記はプログラムの一例で、実行すると下部のコメント部分のように表示されます。
============カコミ============
print(10) # そのまま表示
print(10 + 5) # 足し算
print(5 - 2) # 引き算
print(10 * 2) # 掛け算
print(10 / 2) # 割り算
print(10 % 5) # あまりの算出
# ここから出力結果(実際には“# ”の部分は表示されません)
# 10
# 15
# 3
# 20
# 5.0
# 0
============カコミ============
割り算の演算を行う際、バージョンがPython 3系の場合は小数点以下が切り捨てられないという点に注意が必要です。
小数点以下を切り捨てる場合は“print(10//2)”のように記述することで行えます。
また、通常の数式と同じように+と-よりも*や/の方は優先度が高いですが、()で囲むことで優先度を変えられます(例:print((20 - 5) // 3) # 5)。
変数
プログラミングにおける変数は数式などで使用する物とは異なり、データを扱うメモリ領域のことを指します。
固有の名前によって識別されており、活用することでデータを一定期間記憶して、必要なときに利用できるようになります。
============カコミ============
x = 10 # ここで変数が定義。以降“x”の部分が10に置き換えられます。
print(x + 5)
print(x - 5)
print(x * 5)
print(x / 5)
print(x % 5)
============カコミ============
上記のものは変数を使用した例の1つです。
変数は名前を自由に指定でき、今回は“x”としています。
“変数名 = 値”の記述を行うことで変数が定義され、変数部分が参照した値に置き換えられます。
この時の置換動作は代入と呼ばれており、“左辺の変数に右辺の内容を代入する”ということを意味します。
なお、“=”という記号が使用されていますが、数式における“等号”という意味では使用されていないため注意が必要です。
また、pythonにおいて変数名は大文字と小文字が区別されるので、こちらも見落とさないようにしましょう。
条件分岐(if文)
条件分岐は、条件を満たした場合に処理を実行するプログラムのことです。
if文を用いることで“○○ならば××を行う”というような条件によって変わる処理も表現できます。
条件式を記述する際には、2つの値を比較する記号である“比較演算子”を使用するのが一般的です。
演算子 |
意味 |
---|---|
< |
右辺が左辺より大きい値 |
> |
左辺が右辺より大きい値 |
=< |
右辺が左辺以上の値 |
=> |
左辺が右辺以上の値 |
== |
右辺と左辺が等しい |
!= |
右辺と左辺が等しくない |
============カコミ============
degree = 41 # 変数
if degree > 35: # 条件分岐文
print("猛暑日です") # 条件成立時に実行される処理
============カコミ============
今回は、最高気温(今回の変数。degreeの部分)が35℃を超えた場合(条件分岐文)、猛暑日と表示するプログラムとしました。
変数は41で35を超えているため、“猛暑日です”と表示されます。
条件部分は、“if 条件式 :”の形となっており、行末のコロンをつけ忘れるとエラーになってしまうので、注意が必要です。
ループ処理(for文)
ループは複数回同じコードを実行するための制御構文で、ほとんどのプログラミング言語における制御構文の基本です。
例として、連続した数字のオブジェクトを作るrange関数を使用して、変数“lp”を繰り返し表示させるプログラムをfor文の書式で作成します。
range関数は“range(x)”の形で記述し、0からx -1までを出力してくれます。
また、“(x,y)”のように記述するとxからy-1までを出力してくれます。
============カコミ============
for lp in range(5):
print(lp)
# ここから出力結果(実際には“# ”の部分は表示されません)
# 0
# 1
# 2
# 3
# 4
============カコミ============
ループ処理(while文)
ループ処理は、for文だけでなくwhile文という書式でも作成できます。
while文の場合は、“特定条件を満たすまでループを繰り返す”という形で実行されます。
下記の例では、変数lpの数字が5未満の場合“print(lp)”と“lp + = 1”が実行され続けます。
なお、下記の例のような形の場合、“lp += 1(もしくはlp = lp + 1)”を記述しないと無限ループとなってしまうので注意しましょう。
============カコミ============
# nが10になるまで繰り返し
lp = 0
while lp < 5:
print(lp)
lp += 1
# ここから出力結果(実際には“# ”の部分は表示されません)
# 0
# 1
# 2
# 3
# 4
============カコミ============
代表的なフレームワーク
フレームワークは、アプリケーションを開発する際にその土台として機能させるソフトウェアのことで、用途が異なるさまざまな種類のものがあります。
開発工程を大幅に短縮できる他、プログラムの記述方法が統一されるので効率よく管理・修正を行えます。
しかし、使いこなすためにはフレームワーク特有の記述方法も学ぶ必要があります。
Django
Djangoは、Pythonで実装されたWEBアプリケーションフレームワークで、無料でオープンソースとして公開されています。
汎用性が高いため小規模から大規模なシステムに至るまで対応可能となっている他、ひととおりのWEB開発に必要な機能がすべて詰まった多機能万能フレームワークです。
また、知名度・普及度が高く利用ユーザーが多いため、疑問点や不明点に対する解決方法を見つけやすいという点も大きなメリットです。
Flask
Flaskは、軽量なWEBアプリケーションフレームワークで、標準で提供する機能が最小限に絞られているため、他に比べて動きが軽いという特徴があります。
この特徴から、“マイクロフレームワーク”とも呼ばれます。
1ファイルのみ記述することで実装可能な設計になっており、学習コストが低めで導入しやすくなっています。
また、自分自身で実装する機能が多いので、学習こそ必要ですがカスタマイズ性も高くなっています。
Bottle
Bottleは、軽量・シンプル・高速であることに特化したフレームワークで“bottle.py”という1つのファイルだけで構成されています。
他のフレームワークと比べて機能が少なく機能が限定的であるため、他のライブラリやプラグインで補う必要がありますが、単発的なアプリケーション開発などをスピーディーに行得る点が強みです。
Tornado
Tornadoは非同期通信が行えるリアルタイム通信に強いフレームワークです。
非同期通信により、データの送信者と受信者のタイミングをとらずに通信を行い、リクエスト送信中にレスポンスをまたずに他の処理を進められます。
処理パフォーマンスが高いので、接続が集中しやすいWEBアプリケーション開発でオススメです。
web2Py
web2pyは、シンプルなクロスプラットフォーム対応のWEBフレームワークで、データベースを使用するタイプのWEBアプリケーションを、アジャイルで開発するといった目的で使います。
セキュリティ面に重点が置かれており、デフォルトで入力値の検証を行ったり、出力のエスケープを行ったりする仕組みなどを備えています。
Pythonの活用事例
Pythonは、利便性の高さからマイクロソフトやアップル、Googleなどのさまざまな企業の他、NASAをはじめとした研究機関でも利用されています。
世界規模の検索エンジンをはじめとしたオンラインサービスで、Google Groups、Gmail、Google Mapsといったサービスのバックエンドで各種のタスクを遂行するために使用されています。
検索品質担当ディレクターであるピーター・ノービッグ氏は、PythonはGoogleの重要な部分であり、何十人ものGoogleエンジニアがPythonを使用している旨のコメントを述べており、求人ページでもエンジニアの資格・条件の1つとして、Pythonの経験が挙げられています。
YouTube
言わずと知れた世界最大の動画共有サービス・YouTubeでは、主にサーバーサイドの処理の分野でPythonが使用されています。
YouTubeのエンジニアによると“メンテナンスが容易な機能を最小の開発者で迅速に作成する”という目的からPythonが使用されているとのことです。
InstagramはFacebookが提供している無料の写真共有ソーシャル・ネットワーキング・サービスです。
基本はAmazonクラウド上でPythonによって構築されており、WEBフレームワークにはDjangoが使われています。
2017年に行われたアメリカのPythonカンファレンス“PyCon US 2017”では、InstagramでのPythonの使い方が紹介されました。
PayPal
世界最大規模のオンライン決済サービス“PayPal”でもPythonが使用されています。
TensorFlowというライブラリが使用されており、一時的に変化する複雑な不正パターンの認識による不正減少の精度や正当なユーザーの識別精度の向上という形で活躍しています。
おすすめのPython学習サービス
ドットインストール
“ドットインストール”は、3分動画でマスターできるプログラミング学習サービスです。
“Python 3入門”のコースには31のレッスンが用意されており、Pythonの実用例まで学べます。
テーマごとに3分程度の動画の説明を聞きながらコードの書き方を学べるので、途中で飽きることなく学習を進めることができるでしょう。
なお、自分でコードを書いて動かす場合には、PCにPythonを実行するための環境を別途構築する必要があります。
また、#1~5までは無料ですが、それ以降は有料登録(プレミアムサービス/月額1,000円+税)が必要です。
Progate
Progateでは、Pythonをサイト上で実際に書いて学べるため、開発環境がなくてもオンライン上ですぐ学習を始められます。
わかりやすいスライドを採用した学習方法となっており、初心者にはわかりづらいプログラミング用語も非常に丁寧でわかりやすく説明されています。
その他、達成度や自分の勉強量などを把握できるため、学習のモチベーションを保ちやすくなっています。
なお、Pythonのコースは全5レッスン+1記事から成り立っており、レッスン2以降の受講には有料登録(980+税)が必要です。
Let'sプログラミング(Python入門)
Let'sプログラミング内の“Python入門”は、初心者向けにPythonを使ったプログラミングをわかりやすい言葉で解説したページです。
インストールと環境設定からはじまり、プログラムの記述方法や実行まで学ぶことができます。
シンプルな作りで使いやすく、画像も豊富なのでプログラミングに触れたことがない人でも理解しやすい内容となっています。
また、無料で学べるという点もうれしいポイントです。
入門レベルの内容がメインなので、ある程度知識がある人には物足りないかもしれません。
その他、Pythonの概念的な内容にはあまり触れられていないため、その部分のみ別途学習しておくとよいでしょう。
paiza IO
paiza IOは、ブラウザ上でコードを記述し、その場ですぐに実行できるサービスです。
環境構築の必要がないので、プログラミング勉強会などの環境構築に最適です。
しかし、教材などがあるわけではないため、別途で教材を用意しているかある程度コードが書ける人向けとなっています。
まとめ
Pythonは、その汎用性の高さからさまざまな企業や研究機関で利用されており、今後転職を考えるならば真っ先に勉強して損のないプログラミング言語でしょう。
また、多くの場所で利用されているということは、Pythonスキルの習得が対応できる分野の拡大や日常業務の効率化につながるということも意味しており、単なるキャリアアップだけでなく仕事のクオリティ向上という観点でも習得の意義がある言語ともいえます。
人気と注目度の上昇に伴い、資料や学習サービスも増えつつあるため、これから勉強するプログラミング言語として、Pythonは非常にオススメです。