【Flask入門】Python初心者がマインスイーパーを作ってみる① ~目標設定~
こんにちは、Amagoです。
タイトルは釣りです。私が入門しました。
今回は小ネタとかではなく雑記です。
最近、現場の言語以外にITのトレンドとかの記事をよく見ます。
ほかのエンジニアの方々がとてもレベルの高い内容の記事やつぶやきをしていたのでカルチャーショックを受けています。
『自分も負けてらんないなぁ』と思い、何か、Pythonを使って簡単なアプリを作ってみようと思いました。
気がついたことや進み具合をブログに書こうかと思います。
きっかけ
いろんなつぶやきやIT関連の記事をみて、Pythonに興味が沸いたので。画像解析とか機械学習とかライブラリが豊富だし。。。
まずは簡単なWebアプリケーションを作ってみようって思いました。書かないと覚えないし・・・それと、開発からリリースまで一人でやってみたかった。
マインスイーパーにした理由
実装のボリュームはある程度ありそうで、データベースを使わなくても作れると思ったから。(今後、DBを使ってスコアとか記録できたらなぁとは思っている)
筆者のレベル
他のウェブアプリ開発(C#, javascript, HTML/css, MVC5)の経験はありますがPythonはど素人(Web学習で基本構文を習った程度)、環境周りも少しLinuxを保守で触った程度。
次回目標
開発環境の整備、一旦は「Hello world」をローカル環境で確認するところまで。
【バッチファイル】バッチファイルを使って git にpushするツールを作ってみた②
こんちは、Amagoです。
今回は、前回記事にしたgitへのpushツールを任意のコメントでコミットできるようにバージョンアップしたいと思います。
前回の記事をまだ読んでいない方はこちらから
hamaguchi-amago.hatenablog.com
目次
前回のおさらい
前回作ったバッチファイルはこちらになります。
単純にファイルをクリックすると『update』というコメントで修正ファイルをgitへpushしてくれます。
@echo off cd ”ローカルリポジトリ” && ^ git add . && ^ git commit -m "update" && ^ git push origin master exit /b 0
追加機能の洗い出し
今回追加したい機能は、以下の二点
・コメントを入力させる。
・入力された内容をコミットのコメントに設定する。
それでは順番に見ていきましょう。
今回もこちらのサイトを参考に作りました。
qiita.com
試しにかいてみた
こんな感じでサンプルのバッチファイルを書いてみました。
@echo off set /p comment="コメントを入力してください:" echo %comment% pause exit /b 0
実行してみると、コメントの入力を促されます、とりあえず『テスト』と入力します。
入力してEnterキーを押すと入力した内容が出力されています。
解説
2行目の『set /p 変数="メッセージ"』でコマンドプロンプトを起動しメッセージを出力して入力されるまで待機します。入力されたメッセージはcomment変数に格納されています。
そして、3行目でcomment格納さた内容が出力されています。
ちなみに、『pause』は何かキーを入力するまで待機してくれるコマンドです。
これがないと実行し終わったあとに勝手にコマンドプロンプトが閉じてしまうので入れておきました。
これを前回のバッチファイルに当てはめて修正するとこんな感じになります。
@echo off setlocal set /p comment="コメントを入力してください:" cd ”ローカルリポジトリ” && ^ git add . && ^ git commit -m %comment% && ^ git push origin master pause exit /b 0
それではテストをしてみます。
【実行前のgit】【コマンド】バッチファイルを実行します、コメントは『2019/05/20 amago update』です。コメントはダブルクォーテーションでくくります。
これバッチのほうに入れておけばよかったな。。。
【実行後のgit】一番上に入力した内容が出力されました。
【バッチファイル】バッチファイルを使って git にpushするツールを作ってみた①
こんにちはAmagoです。
先日、『【C#】Genericsで型変換を使ってみた - amagoのエンジニアブログ』を書いているときに調べたことを取り上げようと思います。
新しいことを始めると、次から次へと分からないことが出てくるから大変です。記事のネタになるから別にいいんですけどね。
さて、皆さんGitにpushするときはどうしてますか?
おそらく、大人数のプロジェクトだと専用のGUIツールを使っているかと思います。
私の場合は、個人単位で管理しているリポジトリなのでわざわざGUIを使わなくてもいいかなぁと思ってコマンドで直接Pushしています。
GUIは重たかったり起動するのに時間がかかりますからね。。。
initさえしてしまえば、GitにPushするときは、以下のコマンドを叩けばよいのです。
(本当は、差分を確認したほうがよいのですが、自分しか使っていないリポジトリなので自己責任ってことで)
①ローカルリポジトリへ移動する。
②add
③commit
④push
$ cd ローカルリポジトリ $ git add . $ git commit -m "コメント" $ git push origin master
このコマンドも何回も叩いているとだんだんこんなことを思うようになってきました。
コメントの内容が違うだけで毎回同じコマンド叩いてるなぁ~
いちいちコマンドプロンプト立ち上げるのめんどくさいな
あれ?Pathどこだっけ?
そこで、バッチファイルでも作ってみるかと思ったわけです。
目次
バッチファイルとは
コマンドプロンプトで使っているコマンドを実行するファイルです。
拡張子が『.bat』になっているファイルです。
実際に書いてみた
参考サイト
バッチファイルで長い1行の処理を改行を入れて複数行に分けて書きたい - みちしるべ
バッチファイルでよく使う書き方まとめ - Qiita
参考サイトを見ながら作ってみました。
①ファイルを作る
作る場所はどこでも大丈夫です。
私は何も考えずにデスクトップに配置しました。
まず、『push.txt』というファイルを作ります。
②コマンドを記述
その次にコマンドを書いていきます。
コメントは『update』固定ですが、一旦こんな感じで書いてみました。
@echo off cd ”ローカルリポジトリ” && ^ git add . && ^ git commit -m "update" && ^ git push origin master exit /b 0
cd の後ろはローカルリポジトリを指定します。
『@echo off』はバッチファイルを書く時のお約束みたいなもです。
コマンドを実行結果を出さないようにしています。実行結果を出したい場合はonにしてください。
『exit /b 0』もお約束です。
戻り値を渡しているのですが、今回は1ファイルしか使っていないのであまり意味がありません。
複数のコマンドを使うので『&&』を使います。
『&&』は前回のコマンドが正常終了したら次のコマンドを実行します。
改行したほうが見やすかったので改行します。
単純に改行するとコマンドを正しく認識してくれなくなるので『^』を行の最後に入れます。『^』はバッチファイルでのエスケープ文字です。
③拡張子を変更
コマンドを書き終わったら拡張を『bat』変更します。
途中で警告が出ますが気にせず変更してください。
『はい』を選択するとbatファイルとして使えるようになります。
あとは『push.bat』をクリックするだけです。
最後に
最後まで見てくださってありがとうございました。
この記事をみて自分もやってみよう真似してみようと思える人が少しでもいたらうれしいです。
今回はコメントを『update』固定でpushする方法でしたが、次回はコメントも指定してpushするバッチファイルを作ってみたいと思います。
hamaguchi-amago.hatenablog.com
【C#】Genericsで型変換を使ってみた
こんにちはAmagoです。
C#のコードを書き始めて1年くらい経ちます。最近になって、Genericsの使い方について理解できたので、記事にしようかと思います。
私がプログラムを書くときに心がけていることがいくつかあります。
見やすく、保守し易いことです。
チーム開発ではこれに当てはまらないソースをよく見かけます。
同じような条件分岐が至る所に散りばめられており、仕様変更のたびに全部に修正を加えたりと・・・
それをそのままコピーペーストして無駄な処理が倍々とかね・・・
今回は自分が担当してた機能でジェネリクスを使ったらソースがかなりコンパクトになったので、こんな使い方もあるんだぞというご紹介です。
ジェネリクスを使ってみよう
今回はint、long、Decimalのnull許容型の変数を別の数値型に変換するプログラムを作ってみよう思います。
今回作成したサンプルソースはGitHubで公開してあります。よかったら見てください。
GitHub - hamaguchi-amago/GenericsSample: ジェネリクス サンプルソース ブログの記事で作りました。
intのnull許容型からintに変換してみる(ジェネリクスは使っていません。)
まずは、intのnull許容型からintに変換してみましょう、この場合はわざわざメソッドを作る必要はなく。Convert.ToInt32を使えばいいと思います。
[Sample1.cs]
using System; namespace GenericsSample { class Sample1 { public void Main() { int? data = null; var result = Convert.ToInt32(data); Console.WriteLine("Type : " + result.GetType()); Console.WriteLine("Value: " + result.ToString()); } } }
Type : System.Int32 Value: 0
intとlongも変換してみる(こちらも、ジェネリクスを使っていません)
次は、intとlongを戻り値として受け取りたい場合です。
こちらも、専用のメソッドがあるのでわざわざ独自のメソッドを作る必要はなさそうですね。
[Sample2.cs]
using System; namespace GenericsSample { class Sample2 { public void Main() { int? data1 = null; long? data2 = null; var result1 = Convert.ToInt32(data1); var result2 = Convert.ToInt64(data2); WriteData(result1); WriteData(result2); } private void WriteData(object data) { Console.WriteLine("Type : " + data.GetType()); Console.WriteLine("Value: " + data.ToString()); Console.WriteLine(); } } }
Type : System.Int32 Value: 0 Type : System.Int64 Value: 0
戻り値も引数も指定したい場合は?
ここでとうとうジェネリクスの出番です。よくよく考えると今回の例はジェネリクスを使わなくてもConvertを使えば
良かったかもなぁと執筆中に気が付いてしまいましたが・・・
nullを受け取ったら1を返すとか100をかえす仕様だったり。
メソッド内でほかのメソッドを呼ぶ必要がある場合は無駄ではないよね?
と自分を慰めつつ続きを紹介していきます。
ジェネリックを使って作ったメソッドがこちらです。
[Sample3.cs]
private T2 Convert<T1, T2>(T1 data) { if (data == null) { return (T2)(dynamic)(0); } else { return (T2)(dynamic)data; } }
ジェネリックの便利さがいまいちピンときていないかもしれないので、具体的に例を出します。
例えば、引数に『int?、long?、Decimal?』の3パターンの型のデータを受け取り、それぞれ『int、long、Decimal』の3パターンの型を返すメソッドを作る場合について考えてみます。
ジェネリックを使わずに型を指定すると3×3で9個、ここにもう一つ型が増えたら4×4で16個も同じようなメソッドを作らないといけませんよね。
そんなめんどくさいことをやらなくても型を指定して呼び出してあげれば、たった数ステップで仕様を満たすことが出来るのです。
次は呼び出し方についてみてみましょう。呼び出し方はこちらになります。
[Sample3.cs]
private void Pattern1() { Int = null; Long = null; Decimal = null; var result_1_1 = Convert<int?, int>(Int); var result_1_2 = Convert<long?, long>(Long); var result_1_3 = Convert<Decimal?, Decimal>(Decimal); WriteData(result_1_1); WriteData(result_1_2); WriteData(result_1_3); } private void WriteData(object data) { Console.WriteLine("Type : " + data.GetType()); Console.WriteLine("Value: " + data.ToString()); Console.WriteLine(); }
Type : System.Int32 Value: 0 Type : System.Int64 Value: 0 Type : System.Decimal Value: 0
[Sample3.cs]
private void Pattern2() { Int = null; Long = null; Decimal = null; var result_2_1 = Convert<int?, Decimal>(Int); var result_2_2 = Convert<long?, int>(Long); var result_2_3 = Convert<Decimal?, int>(Decimal); WriteData(result_2_1); WriteData(result_2_2); WriteData(result_2_3); }
Type : System.Decimal Value: 0 Type : System.Int32 Value: 0 Type : System.Int32 Value: 0
もちろん、null以外に数値が設定されている場合も正しく動きます。ちなみに変数Intに設定されている値の2,147,483,647はintの最大値です。
[Sample3.cs]
private void Pattern3() { Int = 2147483647; Long = 2147483648; Decimal = 1000; var result_3_1 = Convert<int?, int>(Int); var result_3_2 = Convert<long?, long>(Long); var result_3_3 = Convert<Decimal?, Decimal>(Decimal); WriteData(result_3_1); WriteData(result_3_2); WriteData(result_3_3); }
Type : System.Int32 Value: 2147483647 Type : System.Int64 Value: 2147483648 Type : System.Decimal Value: 1000
悲しみ、GitHub Pages ってphpつかえないの?
こんにちはAmagoです。
失敗談というか、次回やるときに参考になりそうなサイトをまとめておこうと思います。
結論から言うとやりたいと思ったりことができなかったのです。思いつきであれこれ機能を追加するのはよくあることなのですが、もう少し調べておけばよかったなぁと反省・・・
先日、ポートフォリオサイトを記事をブログに投稿しました。
hamaguchi-amago.hatenablog.com
作ったサイトはこちら
https://hamaguchi-amago.github.io/Portfolio/
まず初めに、ブログを始めて数日のアクセス数がこちら 、
ポートフォリオサイトをいじっているときに自分がアクセスしているだけで、
自分以外誰も見てないじゃん!!と思いながらも挫けずブログを書こうと思います。
早くアクセス件数が伸びてほしいと思い。アクセス件数の伸びそうなアイデアを考えました。
Webスクレイピングを使ってポートフォリオサイトに自分の記事リンクを載せてみよう!!と思ったわけです。
Webスクレイピングとは?
Webスクレイピングとは、WEBサイトからWEBページのHTMLデータを収集して、特定のデータを抽出して整形する処理です。
自分の場合では、下の図の赤い部分を取り出して自分のサイトに埋め込こんで、
自分のブログの注目記事を他のサイトでも見てもらえるようにしようと 思いました。
どうやってWebスクレイピングをするか?
Webスクレイピングってpythonのイメージが強かったのですが、どうやらphpでもライブラリさえインストールしてしまえば簡単に出来ることがわかりました。
phpが使える環境なのか?
あとは、実現化のなのかどうかというところですが、GitHub Pagesでは、静的なhtmlしか使えず、phpはつかえないそうな。。。
Github Pages について整理しておきます | そんなこと覚えてない
せっかく思いついたのにやらないのは、もったいないのでもう少し勉強をして
チャレンジしてみたいと思います。