農のかけ算ラジオ、道照らすの山浦です。このラジオでは、農業と様々なテーマ、
漁業史等を組み合わせて、新しい視点やビジネスアイデアを垂れ流していく番組です。
はい、ということで、今回のテーマは、農×システム開発という、なかなか聞き馴染みのない言葉に挑戦していきます。
今回もゲストをお呼びしております。ゲストに株式会社コーリフトを代表取締役、
木下寛太さんをお呼びしております。よろしくお願いします。よろしくお願いします。
はい、何を書くそうですね。木下さんとの繋がりは、いつも寛太さんと呼んでるんで、寛太さんでいきますね。
寛太さんとの繋がりは、古典ラジオを通した古典クルーですね。
はい、そして僕の場合は前職の時からの繋がりで、その時にカンボジアツアーに誘ったら、まんまと来てくれたという。
まんまと、まんまと行きました。
はい、めちゃくちゃ一緒に行けて楽しかったなと。
まあその時他のね、古典クルーの皆さんも来ていただいてですね、かなり深い話とか色々できたなと思っております。
まあそうは言っても、木下寛太さんのですね、自己紹介をちょっといただきたいなと思いますけども、よろしいですか。
はい、株式会社コリフト代表の木下寛太と言います。寛太と呼んでください。
コリフトという会社は、新しいビジネスとかインターネットサービスの立ち上げに関わるコンサルティングとか、あとシステム開発、
あと新しいビジネスとかサービスを立ち上げるので、その立ち上げたビジネスとかサービスを成長させていくためのマーケティングのご支援みたいなことをやっている会社です。
難しいですね、他には。
これマーケティングとかはあれですか、もうどんなもので持っている感じなんですか。
基本的に我々がご支援させていただいて立ち上げたビジネスとか、インターネットのサービスっていうのが、
例えば楽天とかヤフーとか、フェイスブックとかみたいなものを使っていらっしゃる方多いんじゃないかなと思うんですけども、
そういったものをイメージしていただくと良いかなと思うんですけど、ただそこに置いてあるだけでは誰も使ってくれたいので、
それをどういうふうに宣伝していったりとか、使ってくれている人たちの使われ方みたいなものを見ながら改善をしていくみたいなことをご支援していく。
いわゆるウェブマーケティングみたいな感じですかね。
そうですね。
なるほど。ありがとうございます。なかなか農家、僕もシステム開発とか、なかなか今となってハイテクでも何でもないかもしれないんですけども、
そういったものっていうのは聞きなじみないので、ちょっと勉強がてらお話しさせていただければなと思うんですけども、
今回のテーマはシステム開発ということで、そもそもシステム開発とはみたいなところっていう、別に歴史じゃなくてもいいんですけども、
どういったことをすることが、なぜシステム開発が必要なのかみたいなところをご教示いただけますか。
そうですね。まずシステム開発とはっていうのを一言で言うと、いろんな人がいろんな言い方をしているかなと思うんですけども、
あくまで自分の定義ということで言うと、コンピューターとかインターネットっていう技術を使って課題解決をするための仕組みを作ることというふうに言えるんじゃないかなというふうに思っています。
ちょっと抽象的すぎるので、またもう少し具体的にっていうところは、システム開発で何やってるのかの流れをお話ししていくと分かりやすいんじゃないかなというふうに思っています。
ありがとうございます。
システム開発って言うと山尾さんの中、どんなイメージあります?
いやー、だからSEが何の略かも正直よく分かってないですけど、システムエンジニアであってるんですかね。
そうですね。
なんで、例えば、なんだろうな、それこそ楽天市場とかAmazonとかの仕組みを作るみたいなところとか、あとアプリ。
単純なところでいくと、私のような素人からしたらホームページで、いわゆる黒い画面に謎の用語、言語を書いていくみたいな。
そういうところがシステム開発する人、SEみたいなイメージだと思います。
ありがとうございます。そうですよね。映画とかでハッカーとか出てきて、黒い画面でカタカタカタカタってやってるみたいなイメージですよね。
もうあんなんがみんな全員できるみたいなイメージですよね。
そういうイメージですよね。多分、僕の主観なんで違う人もしかしたらいるかもしれないんですけど、
こういうプログラムを書いているみたいな、黒い画面でカタカタしてるみたいなのは、システム開発の全体の工程の中で多分1割もないかなぐらいで。
そうなんですか。いわゆるプログラミングとイコールではないってこと?
イコールではなくて、むしろ1割ぐらいじゃないかなと思います。全体の工程の中では。
残り9割何やってんの?っていうところから今日お話をさせていただくと、イメージが湧きやすいんじゃないかなというふうに思っています。
すみません。本当に中学生、高校生の分かるレベルでよろしくお願いします。
はい。ちょっと難しくなってきたらどんどん止めてください。
はい。
まず大体大きく4つのステップに分けて今日お話ししようかなと思ってるんですけども、
この最初のステップがそもそも何を作るのかを決めるっていうことなんですけど、これを要件定義っていうふうに言います。何が欲しいか決めましょう。
そうですね。目的が必要ですもんね。
はい。例えば農業で例えてみると、おいしい野菜作りたいみたいな人が来て、山浦さん教えてくださいって言われても困っちゃうじゃないですか。
そうですね。えーと、えーとってなりますよね。
えーとってなりますよね。おいしい野菜を。でもシステムに詳しくない人がシステム開発をしたいときって割とそのぐらいの状態で、
システムを作りたいですみたいな形でご依頼いただくことっていうのが多いかなと思っていて、
僕から農業っていうのを見ても全くやっぱりわからないので、おいしい野菜作りたいですぐらいしか言えないみたいな状況っていうのはすごくよくあります。
じゃあそれってどういうことなんですかっていうのを紐解いていくみたいな作業っていうのがやっぱり一番最初にきて。
具体的にはそのシステムを使って、誰のどんな課題を解決したいんでしたっけっていうことをまず理解をして、
その課題を解決するためにはどんな体験を作る必要があるのか、例えばどんな画面が必要なのかとか、どんな処理をしないといけないのかとか、
そういう課題を解決するためにどんなシステムが必要なのかっていうことを結構細かく定義していくっていうのが最初のステップになります。
そのステップっていうのはインタビューとかそういうところから始まるっていうかね。
そうですね。まず依頼をしてきた人だったりとか、あとシステム開発の中でも作りたいよって言っている企業があって、
その企業の人たちのために作るっていうタイプと、あとは例えば楽天市場とかイメージしていただくといいかなと思うんですけども、
実際に使ってもらう人で、実際のエンドユーザーで何万人何十万人っていうみたいな想定だと、
実際に使う人にどんなの欲しいですかって聞くことはできないんですよね。
そういったタイプのもので、大きくその要件の決め方みたいなものは結構アプローチは違うんですけども、
どちらにせよ誰のどんな課題を対決したって、それはどういうシステムによって対決できるのかっていうことを最初に定義していくっていうことが必要になっています。
なるほど、はい。
で、これが大体全体の4分の1ぐらい占めてるかなっていうぐらい。
まあでもそうですね。骨格がないと、骨格というか目的と、そうですね、それが決まらないと細部まで何も、
そうですね。
グランディングも何もできないですよね。
はい。
だからおいしい野菜作りたいっすって来た人と話をして、つまり甘いトマトが作りたいんだねぐらいまでは、
はいはい。
まずは決めましょうっていうぐらいのイメージが。
誰に届けたいとか、品目ぐらい決めてきてくれよぐらいの。
そうですね。
はいはい。
なんで作りたいんだっけみたいなこととか。
はいはい。
なるほど。
はいはいはい。
はい。
なるほど。
まあでもおっしゃる通り、そうですよね。
農家も漠然と農業してるっていう、一般的なイメージはどうかわかんないんですけども、やっぱり親元から引き継いで、
漠然とやってる方も少なからずおられる雰囲気はあってるですね。
そういった中で、しっかり自分の地に足をつけて、
僕はこういう人たちのためにこういう野菜を作るんだとか、金が欲しいからお金が儲かるために、
じゃあこの品目を作ってこういう売り方をするんだとか、
社会貢献したいから環境に優しい農業をするんだとか、
いろんなやり方があるけども、なかなかそこにたどり着けてない人も、
そこまで考えが至ってない人もなかなか多いんじゃないかなっていう中で、
考え方としてはめちゃくちゃ参考になるかもしれない。
ありがとうございます。
どんな課題っていうところで、もちろん社会貢献でもいいですし、儲けたいでもいいと思うんですけど、
例えば自分で運営してるレストランに卸すためだでもいいと思うんですけど、
結局何のために作るのかによって何を作るべきかって全然違いますよねっていうところの
スタート地点がすごく重要かなというふうには考えています。
そうですね。なるほど。これが4分の1。
4分の1ぐらいですね。
次が設計って言われるフェーズなんですけども、
具体的にそれどうやって作りますかっていうのを決めていきます。
例えば甘いトマト作りたいって言っても、具体的にどんな品種なんでしたっけとか、
土どうするんでしたっけとか、
施設なのかとか。
そもそもどこで作るんでしたっけとか。
めちゃくちゃ農業に合わせて話してくれるじゃないですか。ありがとうございます。
そういうのをちゃんと決めないと作れないですよね。
とりあえず甘いトマト作るって決めたんで、あと種参るときはいいですみたいな話すことにならないじゃないですか。
とりあえずそこらのホームセンターで適当なトマトを何でもいいから植えとこうじゃないですかね。
家庭作業ならそれでいいと思うんですけど、お仕事としてやるにはそれじゃいけないですよね。
っていうのがやっぱシステムも一緒で、システムで言うと分かりやすいところで言うと、
どんな画面、ユーザーインターフェースって言ったりするんですけど、どんな画面にするのか。
ユーザーがこのボタンを押したときに何が起きるのかっていうのをちゃんと決めましょうか。
裏側の方に行っていくと、そのときに入力されたデータっていうのはどういうふうに保存するのかとか。
今までのところがまた設計のところで大体4分の1ぐらいかなっていうところで、
要件定義と設計で大体システム開発の工程の半分ぐらい。
半分ぐらいってことですね。
そこまで締めていて、そこからいよいよ開発、
プログラムを書き始めるという工程になっていきます。
なるほど、はい。
で、このプログラムを書くっていう工程に入ると
黒い画面でカタカタしてるのかって言うと実はそうでもなくて。
まだなんですか?
工程としては確かに黒い画面でカタカタするフェーズなんですけど、
実際は多分考えてる時間が半分ぐらいで。
あー、そうか。
書いてる時間が残りの半分って感じかなと。
あえてまた農業な感じでいくとやっぱ段取りとか。
そうですね。
リンクみたいな人でとかをいろいろちょっと考えて、
こうすればこうなるみたいなのを、
まあ設計は設計になるかもしれないですけど、
考える時間なんですね。
はい。
ちょっと一個今日、プログラミング思考の体験みたいなので、
例を用意してみたんですけど。
大丈夫ですか?それラジオでいけますか?
多分いけると思うので、いけてなかったらカットしてください。
はい、わかりました。
例えば、何か数字を僕が言うんで、
この数字が3の倍数か3がつく数字だったら、
アホになってくださいっていうプログラムを作ろうとする。
どっかで聞いたことあるよね。
作ろうという風に考えてみたときに、
じゃあ何か数字が与えられて、
アホになるかどうかっていうのを判定するプログラム、
ちょっと考えてみましょう。
はい。
で、一番無直なやり方は、
じゃあ3の倍数と3がつく数字を全部裏列して、
その数字に当てはまったらアホになりますっていうのが
一番無直なやり方だと思うんですけど、
そうすると、3、6、9、12、13、15、18、
どこまでやるのでやりますよね。
そうですね。無限ですからね。
無限にあるのでどこまでやるのってなるので、
もう少し賢い方法ありそうだなという風に考えます。
はい。
じゃあまず3の倍数っていうのと3がつく数字っていうのを
別々に考えてみようという風に考えてみます。
はい。
3の倍数かどうかを判定するためにはどうしたらいいかって
山本さんアイデアあります?
え?僕数字弱いんですよ。
3の何乗みたいな。え?何乗じゃないな。
どうしたらいいんだろう。ごめんなさい。
本当僕数字弱いんですよ。
例えば3の倍数っていうことは3で割り切れるはずです。
3で割ったら割り切れるはずです。
そうすると3で割った余りが0。
はい。
考えるとその数字は3の倍数って必ず言えます。
なるほど。なんか英語みたい。
結構そうですね。ロジカルシンキーみたいな感じですね。
そっち側で考えればいいんだみたいな。
3がつくかどうかっていうのは
これはさっきみたいに何か割り算とかじゃできなそうだなと
はい。そうですね。
例えば123っていう数字が与えられたら
123っていう数字の塊じゃなくて
1、2、3っていう文字が羅列してるんだなっていう風に
はい。
その中に3が含まれるかどうかっていうのを
判定したらよさそうだなと。
はい。そうですね。
そうすると3の倍数か3のつく数字っていうのは
さっきの3で割って余りが0。
もしくはその数字を文字として頭から見ていったときに
3があるかないかっていうので判断したらよさそうだなと。
そうですね。2つを組み合わせて。
っていう考える時間っていうのが
実際にプログラムを書く時間と同じぐらいの時間を考えてるっていうイメージです。
なるほど。それがいくつもいくつもあるってことですね。
はい。
これだけだと結構シンプルなんですけども
プログラミングで、特にシステム開発のためのプログラミングで考えないといけないのは
この正常系の処理っていったりするんですけど
うまくいった場合の処理のことだけ考えるっていうのは実は不十分で
例えば今数字を与えられたらっていう前提条件があったと思うんですけど
システムを使う人って結構それ無視してきて
例えばABCみたいなのが入力で与えられちゃいますみたいなことを
想定をしておく必要があったりするんですね。
なるほど。
そういう時にどういう風なエラーを出力しますかみたいなことまで
実はそのプログラミングをしっかりしないと
拒否せぬ異常収容の仕方をして
システム全体にダメージを与えるみたいなことが起きたりするので
なるほど。はい。
それの異常系っていったりするんですけど
正常と異常ですね。
はい。
異常系の処理みたいなものが
実際は全体のプログラムでやりたいことの
3分とか4分の3ぐらい
異常系のエラーハンドリングって言われるようなものが出たりするので
ある意味リスク管理じゃないけど
そうですね。
はい。
そんなに比率多いんですね。
比率というか
半分以上はエラーハンドリングしてると思います。プログラミングの。
はい。
という感じでたくさん考えることが
実はちゃんと設計をしていても
プログラム各段階で考えることがたくさんあるので
はい。
そういうのを考えて書いて
実際に動かしてみると
だいたい何か間違っててエラーで動かないので
はい。
それ間違ってるっていうのは
そのプログラミングが間違ってるのか
その前の段階の考え方が間違ってるのか
どちらのパターンも
どちらのパターンもあります。
へー。はい。
で、それでシステム、そのプログラム動かしたら
怒られるので
エラーが出て怒られるので
ごめんなさいって言いながら修正して
っていうのを
そのエラーのことをバグって
虫ですね、バグって言ったりするんですけど
バグを取る、虫取りのことをデバッグって言うんですけど
はい。
デバッグをしてみたいなことを
やっているのがこのプログラミングの工程で
はい。はい。
なのでこのプログラミングの工程自体も
全体の4分の1ぐらいだと思うんですけど
うん。
その中でも本当にプログラム書いてる時間半分もないから
はい。はい。はい。
10分の1とか言ってましたもんね。
はい。
で、書いたプログラムっていうのを
今度は最後テストするっていう工程が
またその4分の1ぐらいあって
ああ、まあそうか。テストが大変そうですね。
テストが大変で
今のさっきの3の倍数と3の付く数字ぐらいだと
はい。
結構シンプルなんでそんなに大変そうじゃないと思うんですけども
はい。
そういうこう、まあ部品
うん。
こういう断片的なプログラム、部品みたいなものは
何百とか何千とか本当大きいシステムとか
満単位でこう集まって
はい。
一つのシステムできるので
うん。
それのいろんなパターンを決めるじゃないですか
そうですね。はい。
はい。そのいろんなパターンをできるだけ網羅するような
まあテストシナリオというかテストケースというのを作って
はい。
それぞれもう実際に動かしてみて
はい。
ちゃんと動くか
うん。
ちゃんと意図したようなエラーが出ているかみたいなことも
はいはい。
全部確認して
で、だいたい何か問題があるので
この問題が起きたらそれを対処してまた再テストして
みたいなことを
はい。
やるっていう工程がまた全体のやっぱり4分の1ぐらい
締めていって
はい。
で、車でいうと衝突試験みたいなものとか耐久試験みたいなもの
まあシステム
ああ、そういうのもあるんですね。
やっぱりやって
例えば脆弱性試験って言って
うん。
ハッカーが攻めてこようとしても大丈夫になっているかとか
はいはいはい。
あとたくさんアクセスが来ても大丈夫かみたいな負荷試験っていうのが
はい。
はい。
こんな感じで
なんかちゃんと意図した通りに動くかどうかじゃなくて
いろんなイレギュラーケースでも大丈夫みたいなことを確認することを
はい。
やっているのがテストっていうフェーズになる。
うん。
テストそのテストが終わればOKみたいな感じですかね。
OKで実際に公開して
はい。
運用って言って
じゃあ実際に使われるっていうフェーズに入ってくるみたいな感じですね。
うんうん。
これまあ今までこう流れを全体的に最初からまあ聞き取りからテストまで
はい。
これっていうのは
会社、まあコリフトさん会社なんで神田さんのところは何ですか。
何人かでもう役割分担なんですか。
それを基本的にやっぱり一人で全部はできないのでチームでやっていきますと。
はい。
ただチームの中で今の工程ごとに人が変わるみたいな
そうですね。
役割分担の仕方をする時もあれば
あるのはあるんですか。
はい。
チーム、一つのチームで全部をやってあまりそこの工程で役割分担を受けずに
一つのシステムを一つのチームが全部の工程担当しますみたいなパターンもあったりします。
なんか今の前者の感じだとやっぱりこう細かいところがたくさんある中で
こう伝言ゲームになるとなんかバグが起きそうな
おっしゃる通りです。
イメージが。
はい。
なんですよね。
なるほど。
でも前者もあるってことですね。
前者もあります。
そこはでもプロ同士だから成り立つのかな。
成り立つといいんですけどね。
成り立たない場合も多々あるけど。
成り立たない場合も多々ありますね。
内容がややこしいんで全部一人というか一人のプロデューサーみたいな人がいて
全体を全部見ていくみたいなリーダー的な人は
チームの中でもその中心的な人っていうのは絶対必要だなと思って。
そうですね。
次にちょっとお話したいなって思っているのが
ウォーターホールとアジャイルっていうシステム開発の流れの中でも
大きく二つの流派みたいなのがあったりするんですけど
それの話と今言っていた役割分担の話は結構密接に関わってはいるんで
そうなんですね。よかった言って。
全く聞いたことないですけどね。ウォーターホール、アジャイル。
滝ですかみたいな。
滝ですね。まさに滝ですね。
なるほど。
なのでちょっとこの流れでそのお話もしていけたらなと思うんですけど
お願いします。
システム開発に詳しい人に聞かれるとちょっと怒られるかもしれないぐらい
ちょっと雑に説明するんですけども。
雑にいきましょう。
ざっくり今の要件定義、設計、実際開発、そしてテストする
この流れは大体みんな一緒なんですけども
中でも大きくウォーターホールとアジャイルっていう2つの流派があるっていう風に
整理をしてみます。