12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NIFTYAdvent Calendar 2017

Day 7

クレジットカードを使わないでlinebotを作ったときの話

Last updated at Posted at 2017-12-06

7日目担当の @esu_eichi です。
6日目は @tsubasaogawa さんの「pushd と dirs を peco でちょっと便利に使う」でした

#書く内容
このページにはタイトル通り、クレジットカードはないけどlinebotが作りたい、という数少ないであろう人々向けに
クレジットカードなしで登録/利用できたサービスなどをまとめておきます。

##書かない内容
linebotの作り方やapiのtips、ハマリポイントなどは書きません。
クレジットカード登録なしで使った技術の話をまとめておくだけです。

#経緯
先日学生向けインターンシップを担当しました。
学生でもとっつきやすい課題ということでLine Messaging Apiとlaravelで
簡単なリマインダを作るというハンズオンを行いました。
今回はその準備のときの話です。

##課題
学生向けということで、無料かつクレジットカードが無くても登録できるサービスを使う必要があると気づきました。
サーバーに関して、色々探しましたがクレジットカードを使わないと無料分すら利用できないものが多かったため
実際に利用したサービスなどをまとめておきます。

#利用したもの
##Laravel
Laravel は最近日本でも流行ってきたPHPのフレームワークです。
今回サーバー上で動かすプログラムはこれで作ります。利用は完全無料です。

##Line Messaging Api
今回の主役です。少なくとも開発アカウントとして使う分には
こちらも特にクレジットカード登録は不要で使えます。
仕様上、botのプログラムを置くサーバーは https対応されている必要 があります。

##github
ハンズオンで使うスケルトンのプログラムはgithubにあげておきました。
学生たちにはここから今回のプログラムを落としてきてもらってサーバーに上げてもらいました。
privateリポジトリを作らない限りは無料のはずです。

##git
gitも説明するまでもありませんが、github からスケルトンを入手し、サーバーにアップするときに使いました。こちらも無料で使えます。

##heroku
サーバーの選定が一番大変でした。
awsやazure、GAEなど、無料で結構高スペックなサーバーを一時的に使わせてもらえるサービスもたくさんあったのですが、
どれも利用登録段階でクレジットカード登録が必須です
今回HTTPS対応されており、かつクレジットカード登録が不要ということでherokuを選定しました。
が、此処から先がけっこう大変でした

heroku とクレジットカード登録

herokuは登録と無料分の利用こそクレジットカード登録が不要ですが、
Paasであるherokuでは各種ミドルウェアがプラグイン形式で提供されており
それらを利用するには一部を除き クレジットカード登録が要求されます。

heroku postgres

今回リマインダを作るので、リマインドの内容を保持するDBが必要です。
mysql を使うにはクレジットカード登録が要求されるようです。
自分はmysql派なので思わず「全部テキストで管理してやるわ!!」と思い、
実際に半日くらいマジでテキストで管理するよう設計と開発をしましたが面倒すぎて断念。
調査の結果 postgresはクレジットカード登録が不要 でした。なぜだ......

google app script

「リマインドを送る」という以上、ある時間になったらメッセージを送ってほしいですよね。
本来であればDBに保持されたリマインドの内容をcronなどで定期的に確認し、リマインドを実行するという作りにすると思います。
しかしheroku上でのcronはクレジットカード登録が必要です。
完全に詰んだと思い、「学生もクレジットカードくらい持っているのでは」という甘えが強くよぎりましたが、
Google app script を利用することで解決しました。

以下スクリプトを記載します

function myFunction() {

   var options =
   {
     "method" : "post",
     
   };

   UrlFetchApp.fetch("your-own-heroku-app-url:443/api/linebot/remind", options);
}

このスクリプトはただ指定したURLへwebhookを飛ばすだけです。
これを定時実行し、プログラム上でwebhookによるリマインドを実装し解決しました。

#まとめ
書いてみると簡単な内容になりましたが、実際意外とこの縛りで遠回りは多かったです。
ただ、linbot自体は結構簡単に作ることができました。
また、herokuも実は触ったことなかったのですが、癖は感じるものの、
慣れてくると結構便利で、ちょっとしたAPIを動かすくらいなら全然ありです。

ただ、クレジットカードを登録できたほうが10倍は楽なので、
エンジニア、エンジニア志望の学生はクレジットカード一枚くらい持っていたほうがいいです。

以上です。

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?