開発案件の経験は2案件ほどで、ほとんど経験ありません。
そんな私が独学でプログラミングの勉強をしてきました。
そこでいつも「システムやアプリ開発をしたソースコードのサンプルが欲しい」と思っていました。
そこで作ったのが「イベント事前お知らせアプリ」です。
こちらからダウンロードできます。
必要なデータベース(SQLite)やモジュール、ソースコードもダウンロード可能です。
デモンストレーションで動かした動画を載せておきます。
C#でプログラミングを勉強している方の勉強に役立つよう、ソースコードも公開します。
このアプリのソースを読んだり、改修したりして勉強になればと思います。
では早速紹介していきます。
イベント事前お知らせアプリ(ENIA)の紹介
ENIAとは
Evnets Notificate In Advanceの略です。
日本語にすると「イベント事前お知らせアプリ」です。
イベントや予定を登録しておいて、予定日が近づくとメール送信でお知らせするアプリです。
Windowsフォームアプリで、C#で作っています。
実際にイベントを登録した後、自動メールが送信できます。
送信メールこんな感じで送信されます。
ENIAの全体図
アプリのシステム的な全体図を説明しておきます。
以下の通りです。
①ユーザがPC上でイベント登録
②アプリがデータベース(SQLite)へ更新
③バッチファイルが起動し、メールを送信
開発環境
開発環境はVisual Studio 2015で使ったいるデータベースはSQLiteです。
SQLiteは実際の開発で使われることは少ないと思います。
ただ、SQLServerなどをインストールする必要もなく、軽いアプリなのでSQLiteをつかいました。
それぞれ、以下からダウンロードしてください。
開発したファイルのダウンロード方法
開発したソースコードとビルドしたモジュールをダウンロードできます。
こちらからダウンロードできます。
モチベーションが上下したこともありますが、、たぶん2年くらいかかりました。
プログラミングの初心者から中級くらいの方には参考になるはずです
参考書を買うよりは価値があるのではないかと思います。
ENIAはこんな人におすすめ
ENIAをダウンロードして意味があるのは以下のような方です。
・基本的なことが分かっている人(変数、クラス、オブジェクト指向…etc)
・C#の初心者~中級者(3カ月~2年程度)
・いろんなコードの書き方を知っていきたい人
ソースコードを読んで理解する練習に使えると思います。
また、理解した後は、あなたのアイディアで改修を行ってさらに技術力がアップできると思います。
アプリの初期設定
ENIAのアプリを使う前に行う初期設定の説明です。
ファイルの配置先
ダウンロードしたファイルをC:\以下に配置してください。
配置後の状態は以下のようになります。
VisualStudio2015のインストール
開発環境はVisualStudio2015なのでインストールが必要です。
設定は特に必要なく、標準インストールで良いです。
1時間くらいかかります。
こちらからダウンロードできます。
DB.Browser.for.SQLiteのインストール
SQLiteは専用ソフトがないとデータベースを開いて中を見ることができません。
開くとこんな感じで見ることができます。
こちらからダウンロードできます。
メール送信元の設定
以下に配置しているcsvに送信するメールアドレスの情報を記載します。
ファイルの場所
~ENIA_BATCH\references\SenderEmailServerInfo.csv
YahooJapanとGmailの2種類を紹介します。
YahooJapan
UserName、PassWord、SenderEmailAddres以外は以下をそのまま記入すればOKです。
SenderEmailAddresは送信元のメールアドレスで、abc@yahoo.co.jpのようになります。
UserNameはYahooの場合、メールアドレスの「@」より前を入力します。
上で言うと、abcがUserNameにあたります。
PassWordはメールアドレスのパスワードです。
SMTPServer | smtp.mail.yahoo.co.jp |
PortNumber | 465 |
UserName | abc |
PassWord | パスワードを入力 |
SenderEmailAddres | abc@yahoo.co.jp |
CertificateMethod | LOGIN |
SSLEncryption | TRUE |
SSLType | SSL |
Gmail
こちらもYahooと同じで、UserName、PassWord、SenderEmailAddres以外は以下をそのまま記入すればOKです。
SenderEmailAddresは送信元のメールアドレスで、xyz@gmail.comのようになります。
UserNameはメールアドレスの「@」より前を入力します。
上で言うと、xyzがUserNameにあたります。
PassWordはメールアドレスのパスワードです。
SMTPServer | smtp.gmail.com |
PortNumber | 465 |
UserName | xyz |
PassWord | パスワードを入力 |
SenderEmailAddres | xyz@gmail.com |
CertificateMethod | LOGIN |
SSLEncryption | TRUE |
SSLType | SSL |
補足ですが、Gmailからメール送信する場合、アクセス許可を設定する必要があります。
以下URLから設定変更できます。
https://myaccount.google.com/lesssecureapps
タスクスケジューラの設定
画面でイベント情報を登録した後、バッチ処理でメールが送信されます。
定時でバッチ処理を実行するには「タスクスケジューラ」を使います。
以下をご参考下さい。
https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=020402
補足
『9「プログラム/スクリプト」ボックスの右側の「参照」をクリックします。』
開始オプションはバッチファイルが配置されているフォルダを指定すればOKです。
ENIAの場合、「C:\LSTool\EvnetsNotificateInAdvance\ENIA_BATCH\bat」です。
また、普通のPCはシャットダウンされているとタスクスケジューラは動きません。
ENIA_BATCHの概要説明(仕様)
バッチ処理の概要説明です。
b10_0101(イベント情報メール送信)
イベント情報を抽出して、宛先別にメールを送信する処理をしています。
簡単に概要設計を残していたので、ご参照下さい。DB定義
設計書はこちらからダウンロード可能です。
メール送信やXMLファイルの読込については以下で解説しています。
b10_0102(送信履歴更新)
メール送信時に、送信した履歴をデータベースに更新しています。
この処理は「b10_0101(イベント情報メール送信)」の中で呼び出しています。
簡単に概要設計を残していたので、ご参照下さい。
設計書はこちらからダウンロード可能です。
送信履歴があるイベントは、「イベント情報一覧・編集」のデータグリッドビュー上で、黄色く表示されます。
b90_0101(初期テーブル作成)
最初にSQLiteのテーブルを作成するバッチです。
使う必要はありません。
最初からデータベースファイルをダウンロードできるようにしています。
ちゃんと動かないので、興味のある方は解読して、使ってみて下さい…
データベース定義書はこちらからダウンロードできます。
補足
バッチはException発生時にlogフォルダのファイルに吐き出します。
メール送信が上手くされなかった場合はここのログを確認してください。
パス:~ENIA_BATCH\log\log_batch.txt
ENIA_ONLINEの概要説明(仕様)
画面の説明です。
こちらはバッチ処理のように概要設計を作っていません。
処理内容の大枠は画面を動かしてご確認ください。
デモの動画も上記で紹介しているので、イメージいただけると思います。
詳細はC#のプログラムを読んでください。
コードメンテナンス画面
画面左上のリストボックスで「宛先組合せ名」を選択すると、
テキストボックスとデータグリッドビューにデータを表示します。
メールアドレスはTo、Cc、Bccを設定することができます。
また、カンマ(,)区切りで複数登録可能です。
イベント一括登録画面
データグリッドビューに入力した内容ですべて登録します。
「日付」の列にフォーカスが当たると、カレンダーの子画面が開きます。
子画面上で確定を押すと、選択した日付が「イベント一括登録」画面に反映されます。
「宛先組合せ」の列にフォーカスが当たると、宛先組合せの子画面が開きます。
子画面上で確定を押すと、選択した宛先が「イベント一括登録」画面に反映されます。
いづれも画面が閉じる際に画面間でデータの受け渡しを行っています。
本当はエクセルから一括取込みをしようと考えていましたが、作れていません。
改修をしてエクセル取込みを実現してみても良いと思います。
イベント情報一覧・編集画面
検索は画面上部の条件を元に検索を行います。
クリアボタンを押すと、画面初期表示と検索条件が同じ状態にクリアされます。
検索結果はステータスによって行に色がつくようになっています。
データグリッドビューの上に判例がありますが、以下のように背景色が変わります。
一度でも送信されたことがあれば、黄色
終了イベントは灰色
削除されたイベントは黒
更新はデータグリッドビューに表示されているすべてのデータをDatatableに格納し、DBへ更新をしています。
本当は変更された行だけを更新するほうが効率が良いのですが、技術不足で実装できませんでした。
この辺りも改修していただいても良いと思います。
因みに、時間のFromとToはhh:mmのフォーマットでなければ、入力エラーになります。
削除は「削除列」のチェックがあれば、削除フラグを立てる更新をしています。
登録は画面下部のテキストボックスを元に登録します。
データグリッドビューの選択した行を表示するので、コピーして登録する際は便利です。
テキストボックスの時間FromとToはデータグリッドビューのように入力チェック処理を入れることができていません。
こちらも改修をしてみて下さい。
補足
logフォルダはあるが、ログは出ません。
必要あれば、ログを吐くように改修してください。
ENIA_UTILの概要説明(仕様)
共通処理や共通パラメータを格納しています。
具体的には、csvファイルの読込処理や本番環境のデータベースファイルの配置先などです。
詳細はC#のプログラムを読んでください。
本番環境へリリースする際の注意点
本番環境にリリースする場合、注意点がいくつかあるので記載しておきます。
ENIA_UTILのパス
プログラムをダウンロード時は、開発環境の設定です。
ENIA_UTIL.slnにあるConstLib.csのパスが開発(デバッグ)用になっています。
リリースする場合、以下をそれぞれ変更してください。
private const string addPathを変更
以下のようになっているので、コメントアウトを変更します。
本番用と開発用に分けてコメントアウトを変更してください。
1 2 3 |
private const string addPath = @"C:\LSTool\EvnetsNotificateInAdvance\"; //本番 //private const string addPath = // @"C:\LSTool\EvnetsNotificateInAdvance\ENIA"; //デバッグ |
public string UpdateSendHistoryを変更
こちらも同様です。
以下のようになっているので、コメントアウトを変更します。
本番用と開発用に分けてコメントアウトを変更してください。
1 2 |
public string UpdateSendHistory = addPath + @"\ENIA_BATCH\ENIA_BATCH_B1\b10_0102\b10_0102\bin\Release\b10_0102.exe"; //履歴更新 テスト環境 //public string UpdateSendHistory = addPath + @"\ENIA_BATCH\bin\b10_0102.exe"; //履歴更新 本番環境 |
ビルドの順番と本番ファイルの配置先
UTILのパスを変更した後、以下の順番でビルドをしてください。
①ENIA_UTILをリビルド
②ENIA_ONLINE、ENIA_BATCHのソリューションをリビルドしてください。
③各モジュールを本番用のパスに配置(C:\LSTool\EvnetsNotificateInAdvance\ENIA)以下に配置
※ENIA_UTILを先にビルドしないと、ENIA_BATCHやENIA_ONLINEが参照するパスが本番用に変わりません。
配置するモジュールはそれぞれ以下の通りです。
配置先 C:\LSTool\EvnetsNotificateInAdvance\ENIA_BATCH\bin
・b10_0101.exe
・b10_0102.exe
・ENIA_UTIL.dll
・NonMailNet.dll
・System.Data.SQLite.dll
配置先 C:\LSTool\EvnetsNotificateInAdvance\ENIA_ONLINE\bin
・ENIA_ONLINE.exe
・ENIA_UTIL.dll
・System.Data.SQLite.dll
リリースモード
Debugでなく、Releaseでリビルド・ビルドを行って下さい。
想定通りに動かないことがあります。
例)DebugでビルドしたONLINEのexeを起動するとイベント情報一覧・編集画面の入力チェックが反応しないことがありました。
最後に
私は開発に関わった経験は2年ほどで、今は開発から離れています。
また、開発と言っても保守担当として規模の小さい開発しかしていません。
そんな中、独学でプログラムの勉強をして、ENIAを作りました。
モチベーションのアップダウン繰り返して2年ほどかかりましたが…
2年ほどかかりましたが、私のように「システムやアプリ開発をしたソースコードのサンプルが欲しい」と言う思いをされている方のためになれば幸いです。