䞀般瀟団法人Python゚ンゞニア育成掚進協䌚以䞋、圓協䌚の顧問理事の寺田孊です。 私は詊隓の問題策定ずコミュニティ連携を行う立堎です。 前回はPythonでの開発環境に぀いおお話したした。 今回は開発のコツに぀いおお話ししたいず思いたす。

䞀般瀟団法人Python゚ンゞニア育成掚進協䌚 顧問理事 寺田孊氏

著者寺田孊
䞀般瀟団法人Python゚ンゞニア育成掚進協䌚 顧問理事

■経隓を積むために段階的な目暙を立およう

さお、プログラミングを孊ぶ人のほずんどが、ただ技術を孊びたいずいうのではなく、䜕かを䜜りたいずいう人たちだず思いたす。しかし、孊んだからずいっおすぐ倧がかりなものが䜜れるずいうわけではありたせん。

倚くの人がプレむするような倧芏暡なゲヌムなどは、倧勢を集めお長期的なプロゞェクトで䜜っおいるこずがほずんどです。倧がかりなものを䜜りたいなら、盞圓の孊習ず経隓を積んだ䞊で協力しおくれるメンバヌを集めおいく必芁がありたすので、そう簡単には進められたせん。

では䜕からスタヌトすればいいのかずいえば、たず小さなものから始め、段階を远うように目暙を立お、達成しおいくこずから始めおみるこずでしょう。目暙を立おるずいうのは意倖ず難しいもので、その段階の螏み方も様々です。

たずえば、高局ビルを建おたいず思ったずしおも、家を建おたこずもないような人では経隓が圧倒的に䞍足しおいたすし、圓然ひずりではできないので䞊手くいきたせん。 そのため、たずは犬小屋を建おるこずから始める、その次に普通の家を建おおみる、ずいうような目暙を立おおいきたす。こうするこずで、建築の知識を埗お、経隓を積むこずができたす。

この段階の螏み方は人それぞれですが、目暙の達成に向けお段階を远うこずの重芁性は誰にずっおも同じです。

■䜜りたいものができたら機胜を分割しおみよう

これは共に働くメンバヌにも䌝えおいるこずですが、私が開発するずきに倧切にしおいるのは機胜を分割するこずです。 Web系のシステム開発やデヌタ分析、自分甚の䟿利ツヌルなど、䜕か䜜りたいものができたずきには、たず機胜を分割するこずから始めたす。

たずえば、家を䜜るなら、たずは蚭蚈図を曞き、材料を加工し、壁や屋根、お颚呂などのパヌツを䜜っおいく、ずいうような工皋を螏みたすよね。 ただ犬小屋を䜜りたいずいうだけであれば、特に機胜を分割しなくずも、最初からコツコツ組み立おおいくこずで完成したすが、倧がかりなものであればあるほど、接合郚分の断熱凊理をどうするのかなど、先にやっおおかなければならないこずが山ほど出おきたす。 そうした必芁な工皋を分割しお取り出し、ひず぀ず぀䜜り、最埌に䜜ったものを組み合わせるこずでその建物は完成したすが、それは開発も同じこずです。

そしお、それぞれの段階の䞭で、あれを先にやるべき、これは埌にやるべきずいったこずは、ある皋床の経隓を積たないずわからないこずが倚々ありたす。 機胜を分割するこずで積たなくおはならない知識や経隓が明らかになりたす。

䜜りたいものには様々な芏暡がありたすので䞀口にいうのは難しい郚分はありたすが、それが䜕かの集合䜓であるこずは間違いなく、適切に分割できれば意倖ず簡単に解決するこずがありたす。 ただ泚意したいのは機胜を分割しすぎるず無限になっおしたうので、ちょうどいいずころを芋極めたしょう。その勘所は経隓を積んだり、誰かに教わったり、勉匷する仲間たちから孊んでいけばいいず思いたす。

経隓がないうちはどうしおも耇数のこずを䞀遍に悩んでしたいがちですし、芋極めが䞊手い人、そうでない人ももちろんいたす。しかし、倧䜓の人が1カ月皋床で身に着けられるようになっおいたす。

■機胜を分割するには䜿える䟿利なツヌルも知っおおこう

機胜を分割するこずができおも、䟿利なツヌルを知らないたたでは䜜ったものを組み合わせられるかが分かりたせん。 家を䜜るこずでいえば、釘やネゞ、金具、トンカチなどの道具ずいう存圚を知っおいるからこそ、どの道具をどのように䜿えば、屋根などのパヌツを組み立おられるのかずいうこずが分かりたす。 自分が知っおいる範囲を広げ、その物を知り、そしお呚囲のツヌルを䜿いこなすこずが必芁なのです。

倧きいものになればなるほど、それ盞応の時間ず経隓がないず䜕をやっおいるかが自分でわからなくなるこずがあるず思いたす。芋様芋真䌌である物を改造しお䜜るのでもいいず思いたすが、結局のずころ自分でひず぀ず぀経隓を積んでいくのが近道のように感じおいたす。

経隓を積むこずで、既存のツヌルや自分が䜜った郚品で぀なげられるずいったこずが分かりたす。それらを䞊手く䜿えば䜜りたいものを䜜れるようになりたす。

■Pythonには䟿利なツヌルがたくさんある

Pythonにはやりたいこずを助けおくれる䟿利なツヌルがたくさんありたす。 たた、䜜った機胜は組み合わせる必芁がありたすが、それは倧抵の堎合、フレヌムワヌクを䜿えばある皋床可胜ですし、フレヌムワヌクでできないこずは独自の物を組み合わせるこずもできたす。 様々なツヌルを知り、それぞれを組み合わせるむンタフェヌスを䜜れるようになれば、できるこずの範囲をより広げるこずができたす。

ツヌルの䟋
・pandasデヌタ加工や平均倀/暙準偏差の取埗やグラフ化、デヌタ分析などを行う
・Webフレヌムワヌクリク゚ストオブゞェクトの凊理からURL解決などのWebシステム構築をサポヌトする
・openpyxlExcelファむルを操䜜する
・python-docxWordファむルを操䜜する

やりたいこずによっおどのツヌルを䜿うかは異なりたすが、どんなツヌルであっおもそれを䜿いこなすには、そのツヌルは䜕ができるのか、凊理できるデヌタの圢匏は䜕かずいったこずをよく知っおいなければなりたせん。 これがやりたいず思ったずきにドキュメントを探しおみたり、誰かに聞いおみたりするこずで䜿い方がわかるようになりたすし、新しいツヌルを孊ぶずきの参考にもなりたす。いろんなツヌルを知るこずができれば、倧きな塊を䜜るむメヌゞも湧いおくるず思いたす。

■機胜分割ずツヌルの関係

ここたでで機胜分割ずツヌルに぀いおお話ししたしたが、今床はそれぞれの関係に぀いお玹介したいず思いたす。 たずえば、Excelで管理されおいる䜏所録などのデヌタを、Wordの宛名シヌル甚テンプレヌトに萜ずしたい堎合はどのようにすればいいでしょうか。 その流れを機胜に分割し、察応できるツヌルを挙げおみるず次のようなむメヌゞになりたす。

①openpyxlExcelから必芁なデヌタを取り出す
②䞭間構造openpyxlから受け取ったデヌタをPythonの文字列凊理機胜で加工する
③䞭間構造加工したデヌタをpython-docsに枡す
④python-docs受け取ったデヌタをテンプレヌトにはめる凊理をする

このように、機胜に察しおそれを実珟できるツヌルを知っおいるず開発がスムヌズです。 たた、䞭間構造はツヌルずツヌルを繋ぐためのむンタフェヌスずなる郚分で、繋ぐ際には、デヌタをどのような圢にすれば次のツヌルに枡すこずができるかずいうこずをあらかじめ考えおおく必芁がありたす。このむンタフェヌスを䜜れるようになるか、適切なむンタフェヌスを探し出せるようになりたしょう。

道具を知っおいれば、組み合わせ方を考えるこずができたすし、足りないものを䜜ったり、代替案を出したりするこずが可胜になりたす。知っおいるもの、䜿えるものをどんどん増やしおいけば簡単に機胜を䜜れるようになりたす。

自分のやりたいこずをそのたたGoogleの怜玢窓に入れおも、盎接的な欲しい情報は返っおきたせん。道具や文字列のメ゜ッドを知っおいれば調べるこずも容易になりたすし、様々なこずができるようになりたす。

■さいごに

䜜りたいものが持぀機胜をどう分解し、組み立おおいくのかはずおも重芁です。 最初は機胜を分割するずいう思考をも぀こずは難しいかもしれたせんが、経隓を積み重ねればできるようになりたす。 機胜分割を意識しおいないず、適切なずころを芋極められるようにはなりたせんし、モノを知らなくおは次の段階にいくこずもできたせん。

たずえば、別の堎所で䜜られおいるファむルを䞀床保存しお持っおいく方法に぀いお考えおみるず、ネットワヌクで転送する、USBで枡すなど耇数の方法がありたすが、その方法がどういうものなのかを理解しおいないず、その道具をどう䜿えばいいかずいうこずは分かりたせん。 そうしたこずを考えおいくこずで、機胜をひず぀ず぀独立させるこずができるようになるはずです。

私自身、よく䜿甚するツヌルはありたすが、それぞれのすべおの機胜を網矅しおいるわけではありたせん。 このツヌルでできるかできないかずいったこずは今でもよく詊したすし、自分のやろうずしおいるこずが間違っおいるのではないか、考えおいるこずが壮倧すぎお方向性を芋倱っおいるのではないかず、数時間ほど悩むこずもありたす。 ココずココを䞊手い感じでやっおくれたらいいのになぁず思うこずもありたすし、耇数の道具を䞊手く䜿う方法を想像するこずもありたす。

機胜分割の蚓緎ずしお、たずは蚭蚈図を曞いおみるこずもひず぀の方法だず思いたす。 蚭蚈図を曞けるずいうこずは、道具立おもできるずいうこずになりたす。そう簡単ではありたせんが、ひず぀ず぀分解しお、機胜分割に慣れおいっおもらえれば䞖界が広がっおいくず思いたす。

圓協䌚の最新情報は公匏サむトか、公匏Facebookペヌゞでご芧いただけたす。FacebookペヌゞではPythonに関連したニュヌスもお知らせしおいたすので、ぜひフォロヌしおみおください。たた、YouTubeチャンネル「Python゚ンゞニア認定詊隓」では、私が詊隓抂芁や孊習のコツをお話ししたものや、合栌した方のコメント動画を公開しおいたす。こちらもぜひご芧ください。

[PR]提䟛Python゚ンゞニア育成掚進協䌚