個人開発で何を作り、どう作るか。wgetコマンドとGlideを活用したゆるい個人開発記

@dryttです。Qiita 個人開発アドベントカレンダー1日目の記事です。「個人開発」のアドカレなので個人開発はこんなに面白い!ってことが伝えられればと思います。

Qiita 個人開発 Advent Calendar 2019
@drytt (Qiita)

個人開発の面白さってなんでしょう。人によってだいぶ違いはありそうですが、私は次の3つかなと思います。

(1) 好きなものを形にする
何を形にするかはその人次第です。好きなときに、好きなものを、なんでもありです。
(2) 作り方で力量が試される
どうやって作るか、その人の色が出ますし、今の自分がどれだけできるのか試されてる感じがします。
(3) 段々と形になる
少しずつできあがってくる感じは、積み木やパズルなどと同じ感覚かと思います。加えて、個人開発自体を続けることでスキルアップも感じられると思います。

この記事では、実際に私が直近で個人開発をした様子をご紹介する形で、そんな面白さを伝えられればと思います。よろしくお願いします。

目次

1.何を作ろうか
2.どうやって作ろうか
3.作る!
4.終わらせる

1.何を作ろうか

私は普段何かを作ろうと特には意識していません。何か必ず作らなきゃって思っているわけではないということです。もちろん、エンジニアとしての技術力を高めたい気持ちもありますので、なるべく意識的に作るようにしないと!とも思っていますが(苦笑)

ある日の晩、いつものように家で夕飯を食べているとき、ふとテーブルの脇に「杉並区プレミアム付商品券利用店舗一覧」なるチラシが置いてあることに気付きました。

パラパラと中を眺めてみると、利用できるお店が一覧で書いてありました。店舗名と取扱商品が列挙されている形です。これだと自分の生活圏のどのお店で使えるのかわからないなあというのが第一感でした。せめてMAPが欲しいと。妻に話をしてみるとやはり同じ感想を抱いていたので自分だけではないんだな、と考えました。

その時にふと思ったんです。そういえば、最近私は手軽にMAPアプリを作れる手段を知ったっけ、と。それじゃあ、せっかくならこの不便さを解消してみようかな、解決できるアプリを1,2時間でつくってみようかな。うまく作れれば他の人の役にも立つかも?そんな風に考えて、今回の私の個人開発は幕開けしました。

つまり、「杉並区プレミアム付商品券利用店舗一覧」MAPアプリを作ることにしました。完全にノリです。

2.どうやって作ろうか

私の場合、作ろうと思い立ったらすぐに作り方を考え始めます。できるのかなーと。妄想開始です。

今回の場合は、店舗名と取扱商品は既にWeb上(PDF形式)で公開されていたので、あとは店舗ごとの住所を集めて、MAPアプリを作れるお手軽ツールへデータを投入すれば終わりだなとぼんやりアタリをつけました。そして、手順まで細かく落として考えます。

例えば、元のPDF情報に住所を加えてツールに入力するだけだから一瞬で作り終わる?いやいや、元の情報はPDFだから単純にコピペするとデータの整形が必要になるか。でもVimの編集ですぐにできるかな。それに住所ってどうやったら集められるんだろ?手で集めるならWeb検索すればいいけど何か方法があるかな・・・確かwgetコマンドでできそうだったような、、、といった風に。

それで大体できそうだなって思えたら、最後につくるのにかかる時間を考えます。1時間?何か問題あるだろうから2時間?余裕をもって3時間くらいあればできるかな、といった感じです。

この段階でできそうと思えば実際につくります。作り方が思い浮かばないとか時間がすごいかかりそうだなと思ったら、逆にすぐにやめます(笑)自分の性格上、手軽に作れないと意欲も続かないし、イヤになっちゃうので。

つまり、作り方は、公開されているPDFファイルを取得し、住所をWebから取得・付加して、お手軽ツールに投入することにしました。所要時間目安は3時間です。

3.作る!

やったことを書いていったら大長編作文になってしまいました(笑)ので、手順を簡潔にまとめます。各手順の所要時間もあわせて記述します。

最終的には、お手軽ツールへ投入する形式のデータを作成できればいいので以下のような形になります。

(1) データ作成:約60分
 a. PDF取得:約1分
 b. PDFデータ整形:約14分
 c. 店舗毎の住所データ取得(Web):約25分(待ち時間除く)
 d. 住所データ整形:約20分
(2) データ補正:約300分(待ち時間除く)
(3) お手軽ツールへ投入・修飾:30分

一部に絞って詳細を説明しますと、(1)c.とd.は俗に言うWebスクレイピングを行っていました。実際に作成したスクリプトは以下になります。

#!/bin/sh
 i=0
 while read line
 do
  ad=`wget "https://www.google.co.jp/search?q=住所 $line 杉並区 &ie=UTF-8&oe=UTF-8&num=20" --no-check-certificate --user-agent="sugi" -O -`
  if echo "$ad" | grep 〒 -m 1 >/dev/null; then
   echo $ad >> address.txt
  else
   echo "no address" >> address.txt
  fi
  i=$(($i+1))
  echo "get $i"
  sleep 5
 done < suginami_nofixed
 echo "Finish"

簡単にスクリプトの解説をします。

#!/bin/sh
はシェバンですね。シェルの定義です。

i=0
はカウンタ変数iを定義。

while read line do ~ done < suginami_nofixed
で「suginami_nofixed」ファイルを1行単位で読み込んでいます。

ad=
は変数定義して、wgetで取得したgoogle検索情報を格納しています。

wget"~"
はwgetによる特定のキーワードでgoogle検索。

if echo "$ad" | grep 〒 -m 1 >/dev/null; then ~ fi
は住所が取得できていれば「address.txt」へ追記。住所が取得できていなければ"no address"と追記します。

あとは処理待ちを5秒ごとにして、Finishと出力させて終了してます。

ちなみに、wgetコマンドとさらっと書いてますが、実のところやったこともないしやり方も知らないので、諸々Webで調べながら作ってます。

そして、(2)データ補正のところで、つまづく、つまづく(笑)つまづきの連続です。例えば、全く違う住所が取得されてて意図したデータになってない、とか。なぜか取得したデータ件数が元のデータ件数と一致しない、とか。

時間もかかりましたし、ほんとうはこの部分が最もノウハウとして残すべきだと思ったのですが、記事として書く気力が続かず今回は省略します。無念です。

(3)のお手軽ツールは「Glide」という所謂NoCodeツールですね。Googleスプレッドシートにデータを入力するだけで、簡単にMAPアプリ等が作れるものになります。

Glideの具体的な使い方については、次の記事が参考になりましたのでご興味があればあればご覧ください。本当に簡単です。

Create an App from a Google Sheet in Minutes · Glide

簡単過ぎる!GoogleスプレッドシートからPWAアプリを開発できる「Glide」を使ってみた!

4.終わらせる

できたものは以下になります。

杉並区プレミアム付商品券利用店舗(久我山)MAP

ただ、つくる中で諸事情があって初めに描いていたレベルまではできてないのですが。でも、そこは拘らずにひとまず公開してクローズします。

...

以上、私の個人開発記でした。いかがでしたでしょうか。実際に個人開発をされている人からすると、ゆるいなーと思われるかもしれませんがご容赦ください(笑)

冒頭の個人開発の面白さの話に戻りますが、今回の記事を読むことで少しでも面白さを感じてもらえたでしょうか。具体的には、

・好きなものを形にする...大義など大層なものはなく、思いつきで作りたいものを作っています。気分良いです。

・作り方で力量が試される...今の自分なら作れるかな、できた。今の自分だと難しいな、次回に回そう。そんな風に気軽に捉えてます。気分良いです。

・段々と形になる...今回の記事ではほぼ書けなかったのですが、たいていの場合は試行錯誤があるので。その中で少しずつできてくる感覚が味わえます。
スキルアップという意味ですと、私は今回初めてwgetの活用/Webスクレイピングを実施したので、今後は臆することなくWebからの情報取得ができそうです。気分めちゃめちゃ良いです。

などになります

個人開発の面白さを少しでも感じていただくことができて、個人開発をはじめるきっかけや個人開発を引き続き行うモチベーションになりましたら幸いです。

以上で1日目の記事を終わります。

拙い文章ですがお読みいただきありがとうございました。もし、私の個人開発に興味をお持ちになられた方がいれば、去年のアドカレ記事も読んでいただけると嬉しいです。

初めての個人開発の話(進め方と勉強の仕方)

今年の個人開発アドカレ、楽しみです!2日目以降の記事はどんなものが投稿されるのでしょうか。12月はなんて楽しい月なのでしょう!

明日は@morizyunさんの記事です。乞うご期待です!

@morizyun (Qiita)

それでは、個人開発をする全ての人の幸せを願って。また会いましょう!