kintone でイベント受付システムを1週間で作った話

はじめまして。システムコンサルティング本部の北川です。

今回は、駆け出しエンジニアの私が担当した cybozu.com conference 2013 のイベント受付システムを紹介します。

cybozu.com conference 2013

システム構築には時間と手間がかかる

この受付システム自体は至って一般的なものです。 まず、ユーザーはフォームに必要事項を入力し、アカウントを取得します。メールで送られるログイン情報を元に各ユーザー用の cybozu.com 環境にログインすると、登録情報の閲覧や運営側に問い合わせができます。

では、1からこのシステムを作ることを考えてみましょう。 必要なものはざっくりと、以下のものになります。

  • 入力フォーム
  • 情報を保存するための DB
  • 保存情報をユーザーに見せるためのページ
  • 情報閲覧ページをユーザーに自動でメール返信する仕組み
  • 運営側への問い合わせページ

仕様を決め、開発して、テストして...と考えると、ごく少人数で開発した場合、とても短期間で作成できないと思います。しかし、今回は kintone と連携サービスを組み合わせることで、駆け出しエンジニアの私でも1週間でこのシステムを作ることができました!

kintone でファストに構築!

では、今回システム構築をする上で実際にやったことと、かかった時間を紹介します。

入力フォーム

こちらは、フォームクリエイター という、kintone の連携サービスを使いました。kintone から入力項目の情報をとりこめるので、ちょっとしたレイアウトの修正のみで約15分程度でサクッと完成です。

情報を保存するための DB

kintone を利用することで特になにも考えずに準備完了です。

保存情報をユーザーに見せるためのページ

ユーザーの情報ページは kintone のアプリで管理します。kintone のアプリ作成は GUI でぐりぐり作成できるので、わずか30分程度で完成。

情報閲覧ページをユーザーに自動でメール返信する仕組み

今回のシステム構築で一番時間がかかった部分です。具体的な処理は以下の3つです。

  1. 登録情報から QR コードを作成する
  2. 作成した QR コードを登録情報ページにアップデートする
  3. 案内メールを送信する

こちらは、kintone SDK for Java が用意されており、初心者の私でも3日で実装できました。

運営側への問い合わせページ

こちらも「保存情報をユーザーに見せるためのページ」同様アプリで管理していたため、30分程度で完成。

よって、全体でかかった時間はで3日と1時間15分です。3日ボウズの私でも飽きる寸前で構築完了です。実際には、テストやプログラムを配置するサーバーも準備したので、全体では1週間かかりました。

kintone SDK for Java の利用例

では、一番時間がかかったプログラム部分をざっと紹介します。下の概要図における3つの処理を kintone SDK for Java で実装しました。

システム概要図
システム概要図

図中の3つのプログラムの処理内容は以下の通りです。

  1. 任意の参加者 ID を割り振ります。
  2. kintone API で参加者 ID を取得し、QR コードを作成します。生成した QR コードをレコードに添付します。QR コードは、Java のライブラリを使って作成しています。
  3. ログイン名とパスワードを生成し、User API でユーザーアカウントを作成します。
  4. kintone API でレコード情報を取得し、レコードへの URL とログイン名を記載したメールとパスワードを記載したメールをそれぞれ送信します。

これを定期実行することで、申込された方にご案内のメールを送信していました。カンファレンス当日は QR コードを印刷などで持参いただき、受付でチェックするという流れです。内心、QR コードが正しく認識されるかヒヤヒヤしていましたが、大きな問題はありませんでした。

最後に、今回実装した QR コード作成後に kintone のレコードを更新する処理の一部を紹介します。

//QRコード作成
int i = 0;
int iCounter = 0;
for (; i <= index; i++) {
    if (userInfo[i] == null){
        break;
    }

    long id = userInfo[i].RecordNo;
    Record record;
    record = new Record();
   
    List<String> listUser = new ArrayList<String>();
    listUser.add(userInfo[i].LoginId);            
    
    record.setString("loginid", userInfo[i].LoginId);
    record.setUsers("loginname", listUser);
    record.setString("password", userInfo[i].Password);
    record.setFile("qrcode", (new File( QRcodePath + userInfo[i].LoginName + ".jpg")), "image/jpeg");
    listSend.clear();
    listSend.add(stext);
    record.setStrings("send", listSend);
   
    // DBUpdate
    try {
        db.update(app, id, record);
        bolUpdate = true;
    } catch (DBException e) {
        writeLog("ERROR", e.getLocalizedMessage());
        bolUpdate = false;
        e.printStackTrace();
    }

システム構築に革新を

今回は kintone にひと工夫加えることで、短納期で実用的なシステムを構築できました。これからも、今までは時間と手間がかかっていたシステム構築作業を kintone で「ファストなシステム構築」に変えていきたいと思います。