あかんわ

覚えたことをブログに書くようにすれば多少はやる気が出るかと思ったんです

恋するプログラムをSinatraでWebアプリにするPart.1[CHAPTER3 ほんとに無能]

記事の概要

『恋するプログラム』の[CHAPTER3 ほんとに無能]で作成するチャットボットプログラムを、そのままコンソールアプリケーションとして、Macのターミナルで動かします。
Webアプリにする作業に取り掛かる前に、まずは『恋するプログラム』の基本構造を学びます。

注:この記事ではまだ、Webアプリと呼べる代物は出てきません。

目次

開発環境

参考記事
Rubyの開発環境構築は、こちらの記事を参考にさせていただきました。

protoと会話する

入力した文字列に対し、「ってなに?」を追加した応答を返すチャットボットを作成します。

アプリケーションディレクトリの構成
~/programinlove
    |- proto.rb  // 基本的なチャットボットプログラムの全てが詰まったメインファイル
ソースコード

サンプルプログラムのままだとエラーが出たので、マジックコメントを削除しました。

サンプルプログラムでは、Ruby1.8で文字コードにシフトJISを使用しているため#! ruby -Ksが必要らしいのですが、Ruby2.0でこの記述があるとシンタックスエラーになるようです。
また、Ruby2.0ではデフォルトでUTF-8が適用されるため、UTF-8の環境ではマジックコメントが不要らしいです。

コードは、

//proto.rb
#! ruby -Ks

class Responder

の部分を

//proto.rb

class Responder

に変更して、[chapter3-3]のタグを付けて置いてます。

実行結果

このproto.rbをターミナルで動かすと、会話気分が楽しめます。

~/programinlove
$ruby proto.rb
Unmo System prototype : proto
> こんにちわ
proto:What> こんにちわってなに?
> あいさつですよ
proto:What> あいさつですよってなに?
> Huh?
proto:What> Huh?ってなに?
> (#^ω^) 

*1

protoの応答の種類を増やす

入力した文字列とは関係無く、用意された3種の応答から1つをランダムに返すチャットボットを作成します。

アプリケーションディレクトリの構成
~/programinlove
    |- proto.rb      // 入力と出力をするだけのメインファイル
    |- unmo.rb       // チャットボットオブジェクトのモデル
    |- responder.rb  // 応答オブジェクトのモデル
ソースコード

やはりサンプルプログラムのままでは動かなかったので、マジックコメントの削除の他に、requrireをrequire_relativeへ変更しました。

Ruby1.9.2から、カレントディレクトリがrequireのロードパスから除かれたそうで、今回のプログラムでは ファイル数も多くないためrequire_relativeを使って動かしました。

コードは、

//proto.rb
#! ruby -Ks
require 'unmo'

def prompt(unmo)

の部分を

//proto.rb
require_relative 'unmo'

def prompt(unmo)

に、

//unmo.rb
require 'responder'

class Unmo

の部分を

//unmo.rb
require_relative 'responder'

class Unmo

に変更して、[chapter3-4]のタグを付けて置いてます。

実行結果

このproto.rbをターミナルで動かすと、噛み合わない会話が楽しめます。

~/programinlove
$ruby proto.rb
Unmo System prototype : proto
> こんにちわ
proto:Random> きのう10円ひろった
> それは良かったですね
proto:Random> きのう10円ひろった
> そんなに嬉しかったんですか?
proto:Random> きのう10円ひろった
> oh
proto:Random> 今日はさむいね
> そうですね
proto:Random> チョコたべたい
> あ  ちょっっと
proto:Random> 今日はさむいね
>

参考書籍

関連記事

- 恋するプログラムをSinatraでWebアプリにするPart.0[はじめに]
- 恋するプログラムをSinatraでWebアプリにするPart.2[CHAPTER4 あこがれのGUI]①
- 恋するプログラムをSinatraでWebアプリにするPart.3[CHAPTER4 あこがれのGUI]②
- 恋するプログラムをSinatraでWebアプリにするPart.4[CHAPTER4 あこがれのGUI]③
- 恋するプログラムをSinatraでWebアプリにするPart.5[CHAPTER5 辞書を片手に]
- 恋するプログラムをSinatraでWebアプリにするPart.6[CHAPTER6 感情コントロールの魔術師]①
- 恋するプログラムをSinatraでWebアプリにするPart.7[CHAPTER6 感情コントロールの魔術師]②
- 恋するプログラムをSinatraでWebアプリにするPart.8[CHAPTER7 学習のススメ]①
- 恋するプログラムをSinatraでWebアプリにするPart.9[CHAPTER7 学習のススメ]②
- 恋するプログラムをSinatraでWebアプリにするPart.10[CHAPTER7 学習のススメ]③
- 恋するプログラムをSinatraでWebアプリにするPart.11[CHAPTER8 文章を作り出す]
- 恋するプログラムをSinatraでWebアプリにするPart.12[CHAPTER9 ノビィ、ネットワークにつながる]
- 恋するプログラムをSinatraでWebアプリにするPart.13[おわりに]

*1:上述のソースコードを実行しても顔文字は出ません