お疲れ様です。たなしょです。
まずはここまで25日間、駄文に付き合っていただきありがとうございました。
読書の方々がいたからこそ、思い付きで始めた企画ですがプログラミングをしてブログを書き続けることができました。
今日は最終日なので今までの振り返りができればいいなと思います。
Cシャープを勉強してみる
デスクトップアプリを作りたいということでC#を一から勉強してみました。
Javaや他の言語の経験があるので基本的な文法はすぐにキャッチアップすることができました。
今までの記事でも散々書いてきましたが記法は綺麗でとても読みやすいのとVisualStudioというIDEの力もあってとてもスムーズに開発することができました。
このような感じに{}
を書くのが新鮮でとても見やすかったです。
class CollectionInitializable : IEnumerable
{
public void Add(string item)
{
Console.WriteLine($"{item} Added");
}
public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
}
あとLINQなどの特殊な文法も学びました。
LINQに関してはSQLを書いてる感覚でデータセットを処理できるのはわかりやすいなと思う反面、SQLを書いた経験がない初学者には理解するのが大変な文法なのでないのかと思いました。
実際私も1冊目の参考書では理解できず、2冊目の参考書である程度理解することができました。
VisualC#でアプリを作る
VisualC#でアプリを作るのはとても楽しかったです。
フォームで簡単なアプリを作り、電卓をつくたりしながらVisualC#でのアプリ開発を学びました。
各パーツへの値の渡し方がわかればデスクトップアプリを作ることができるのは感動しました。
電卓はラベルを用意して各ボタンがクリックされたタイミングで計算式をラベルに入れるだけで作れました。
カノジョ(チャットボット)を作る
VisualC#になれたところでカノジョを作りました。
返信用のスーパークラスを作成してサブクラスとして各種返信用のクラスを作成して、返信ごとの機能を追加していきました。
始めはランダムな辞書によるあいさつとオウム返ししかできなかったアプリが、ランダム辞書を作成し、単語とそれに連なる返信を切り分けるParseクラスを作成することで、ユーザーの発言がパターンにマッチした場合はパターンに沿った返信をしてくれるようになりました。
またパターン辞書に数値を入れることで機嫌値という概念を設けました。
特定のキーワードをユーザーが発言すると機嫌値が上下して喜怒哀楽まで表現できるようになり、これには感動しました!
さらにコミュニケーションをできるようにした
MeCabというライブラリはPythonを触っていた時に耳にしたことはあるのですが今回使うのは初めてだったので使ってみて機能を知ることができました。
形態素解析をしてユーザーの発言を切り分けて名詞と判別したものをパターンとして登録し、パターンを連なる発言をユーザーの発言から学習するようにさせたことでたくさん会話すれば色々なキーワードにあった会話を楽しむことができるようなりました。
さらにテンプレート辞書を作成することで%noun%という文字列をユーザー発言内にある名詞に置き換えることでさらに会話の幅が広げることができました。
完成したカノジョです!
今回書いたコードもGitHubにアップしましたのでぜひ参考にしてみてください!
今後の課題
まだ発展途上のアプリなので少ないですが今後は時間を見つけて以下の課題に取り組んでいきたいと思っています。
・ チャットボットからデスクトップマスコットへ変更
・ Grep機能などのその他機能の追加
最後に
25日間お付き合いいただきありがとうございました!
優良な記事が多いQiitaの中でこのような駄文を垂れ流してしまってごめんなさい。
今回は当初の目標であるカノジョ(アプリ)を作ることを達成することができました。
ものを作ることが楽しいというモチベーション一本で何とかここまで続けることができました。
作っていて初めからWindowsフォームからがちがち作っていったほうがもっと良いアプリが作れたのではないかという反省点もありますが、それは今後の開発で生かしていこうと思います。
年末は低レイヤーの世界にでも引きこもってOSっぽいものでも作ろうかと思います。
あとは息抜きでGoでCLIツールを作ったりPHPでWebアプリでも作りながら家に引きこもってると思います。
ではではみなさん良い年末をお過ごしください!
ありがとうございました!