DDDってなんなの?
今読んでる本
・「実践ドメイン駆動設計」
・「現場で役立つシステム設計の原則」
どちらもDDDに関する本。
エバンス本は立ち読みして難しそうで敬遠。(近々読むことになりそうだが)
そんな中、「実践ドメイン駆動設計」の読書会に参加し、読み始めた。(今後も継続して参加予定)
読んでいて意味が分からない上にどうやってコードに落としたら良いのか。が掴めない。
モデルで直接DBとやり取りせずサービスクラスを使うようなイメージで、
DDD=レイヤードアーキテクチャの事だと思っていたが、「実践ドメイン駆動設計」では、
違うという風に説明している。 Repository パターンはDDDのパターンの一つなのか?答えが出ない。
読み進めながら実際にコードを書いて試してみるしか方法がなさそうだ。
2016/11 頃に読んだ「Laravelリファレンス」で書いてあった Service クラスや Repository クラスは、
今考えてみるとDDDの開発手法だったのか? もしかしたら全てドメイン駆動という事で繋がっていそう。
中途半端な状態という事を記録として残しておく。
8月中にはこの辺りの理解を深めてコードで違いが分かるようにする。
最近の事を
2017年4月頃からブログを更新していなかったので、最近の調子を書く。
さすがに今日はHHKBからの入力を試しながら。
仕事
- 新しいプロジェクトについて、技術選定とか出来そう
- テスト自動化など、業務システムにどんどんテストコードを混ぜて行きたい
家族
- もうすぐ息子が2歳を迎える
- 子どもと2人で出かける事もたまには出来ているが毎週末2人でどっかに行くことは出来ていないのが課題
コード
- Write Code Everyday
- 4月末で止まってしまった。GWもほぼかかずに過ごしてしまい、断念。継続できず。
- また始めようと思い、今日は部屋に机を作った
- いつものように、南アルプスの天然水のストックを重ねて、上にこたつを載せて完成
- 最近興味あること
- Reactビギナーズガイドを買って軽く1周したので、コードを書きながらReact.jsをちょっと試したい
- 業務では Laravel + Vue.js を使いそうなので、ここもサンプルだけでなく、もう少し深く触りたい
- できれば、サービスレイヤをおいて実装したいが、このあたりは理解が弱いので手を動かして理解したい
- 土日はやっぱり手を動かす事が難しくなってきたので、平日に動かすしか方法がなさそうだ。
その他
- 時間がないとか言っておきながら、ストレス発散目的でXbox One S を買った
- 久しぶりにHalo をやったり、Just Cause3 というオープンマップのアクションをプレイしたり。あれ、時間あるじゃん。。。
HHKB(US)Type-Sデビュー
一度使って見ようと思い高くて迷ったが購入を決めた。
といっても家では机がないので打つ術がなくMacBookProのキーボードで今は書いている。
2010年頃に一度使って見ようと思いHHKB(JIS) Lite2を購入したが矢印キーがうまく使えず断念。
ここ最近2014年6月くらいからは、東プレRealForce(US)テンキーレスの黒色を使っていたが、
キートップの昇華印字が見づらく、AppleWirelessキーボードに変更していた。
簡単なキーボード歴史
- 2010/x HHKB(JIS) Lite2 を使ってみるが即断念
- 特にこだわりがなく、WindowsでJISキー配列のキーボードやノートPCをそのまま利用
- 2014/3 MacBookPro (US配列) の利用を開始(家でも仕事でも同じMacを使うため、デフォルトがUS配列となる)
- 2014/6 東プレ
- 2016/x キータッチがMacBookProと微妙に違うのでAppleWireless キーボードを使い始める
- 2017/3 なんかキータッチの打ち心地が嫌になってきた(衝撃が強くて小指が痛い)ので東プレに戻る
- 2017/6 キートップの文字が見づらくなってきた
解決したい事
- 黒キーボードだと目が疲れてきた時にキートップの文字が見えづらい
- 記号含め(上段)のキーをすべてブラインドタッチできれば良いが、練習へのモチベーションがゼロ
- AppleWireless キーボードはすごく使いやすいが、グラつきと、打ってる時の衝撃が指に伝わって右手小指が痛い
- あまり激しくMacBookProのインナキーボードと差を出したくない(家ではMacBookProを直接使うので)
選択肢
- 東プレもAppleWirelessも使っているのでHHKBしかない
- 色は白(無刻印はかっこいいけど、記号が)
懸念点
- 一度挫折した矢印
- ExcelでShift + Fn + 矢印割当のキー とか押せるのか?
- MacBookProとの差異
- ~ , Delete キーの位置
HHKBを使って解決を期待する事
- 小指の痛みが改善される。あと、入力時のグラつき
- 記号入力時のタイプミス(白いキーボードであれば何でも良いが)
- 東プレより省スペースなのでマウスまでの位置が近い。AppleWirelessとは同じくらいなので変化なし
という事で今後仕事で使う事になるので、
期待値が満たせない・または最高!のような感想は今後追記する。
20170811 追記 (1ヶ月くらい職場で使った印象)
- 結構すぐに矢印問題 (Fn + x) での動きには慣れた 1週間くらいか。
- 1ヶ月経った今でも、Ctrl + Fn + x の矢印や Shift を使って選択するときは、Keyboard を見ながら矢印を押してる
- これはこのまま使っていけば、更に慣れて問題なく使えるようになりそう
- 問題点と今思っている事
laradock で開発環境構築
PHP で Docker 環境作る時のコンテナ集というイメージ
作成してみたが、Directory の構成がまだ不明な点があるので追記予定
若干 docker-compose.yml の書き方が変わっている。qiita の情報では、Ver が少し古いのか。
参考リンク
追記
- MySQL の設定は laravel directory の .env に書く
- http://localhost のURIで見る場合は、laradock/apache2/sites/default.apache.conf を書き換える
- 忘れず docker-compose build -> up を行う
- laradock に必要な環境変数は laradock/.env にある。 laravel / laradock がどちらも .env で管理しているので紛らわしい
- 必要なコンテナだけ立ち上げる ( こんな感じ )
ライトコートエブリデーる
タイトルで言いたい事はすべて言ってしまっているが、補足も兼ねて今やっている事を。
Write Code Everyday
- 日々何かしらのコードを書き、Commit する。GitHubに草を生やす
- 2015年もやっていたが、51days くらいで止まった
- 当時は妻が実家に帰省していた かつ、子どもに使って欲しいとアプリのコードを書くモチベーションがあった
現在
- ちょうど 3weeks を超えたところ
- 少し癖になってきたので、次の(たぶん 3ヶ月)ポイントまでの目標と今考えている事のまとめ
なぜ始めたか
- こんな事書き始めたら Wantedly みたいだ
- いろいろな不安と戦う為に前に進んでいる感覚が欲しい
- 家族との時間を大切にしたいので、週末にまとめて一気に時間を確保するという事を避けたい
- 前回の51days を超えたい
- 少しでも新しい事を始めたい
- 昨年末に参加したBuilderscon の mattn さんの言葉
- Q いつ時間を作るんですか? A とにかく頑張るしかない
- Q なぜ頑張るか A 若い人たちに勢いだけは負けたくない
- 実際にBTCのアプリ(かなり雑な感じだが)は、日々触る事で少しずつ形になった
- 作りたいアプリはあるが、なかなか自分に言い訳をして進められていない
試したこと
次に書く内容
- 3ヶ月たってみてどうか?
- その頃には51days を超えているので、自己最長になっているはず
- commit の粒度は今と変わっているか?
- 今はhack的に Readme を書き換える commit をしたり
- string -> here document に書き換えたり といった事をしている
- 作りたい、触りたい事を触れるようになっているか?
現時点の反省点
- 23:00 - 24:00 の間くらいに commit する事が多い
- 07:00 - 09:00 の出社前に一日の commit を済ませておきたい
- 夜は飲みが入ったり、疲れて眠ってしまう事もあるので
(11分で書いた。ネタだしはノートに10分。計20分)
BitCoinを自動売買するアプリ
作ろうと思ったきっかけ
- Ruby / Rails 使ってなんか作りたい(前から思ってる)
- BitCoin の値動きが気になる (BitFlyer社のアカウントあり)
- あわよくばドリンクやランチ代くらい稼げないか
- お金に関わる事だから、飽きずに進められそう
急に2017年2月くらいにBitCoinの自動売買を試してみようと思い、アカウントのあるBitFlyer社のAPI説明ページを読み始める。PHPでかけばもっとサクッと行けたと思うけど、動機の1つにRailsを触るという事があったので、少し調べて実装の繰り返し。
作った仕組み
- Batch を毎10分で実行し、ログから"買い時"と判断したら、買いと売り注文を出す
- Log も毎10分で実行し、過去数時間経過した注文の結果を取得し、結果モデルを作成
- Result は1日1回実行し、結果を集計し、メールで結果を知らせる
- Gabage は Heroku の Free プランの上限を超えないよう PostgreSql のレコードを削除する
- 概要はこんな感じ
現在の結果
- 2017/¾ - 20173/19 時点の結果。
- 752 戦中 317 勝 435 敗 (金額は少額の取引を行っているので、1000円 - 2000円 くらいマイナスじゃないか)
- 基本的には1取引 0.01BTC (約1300円〜1450円)で行っている
毎朝届くメール (3/21のresult)
- 実際は 1/100 で取引しているので、day_sum 35円くらいのイメージ
total_count => 853 day_count => 42 day_sum => 3547.0 day_lose => -6219.0 day_lose_count => 20 day_win => 9766.0 day_win_count => 22
1BTCの値動き
- 130000 - 145000 くらいの間で動いていた。
- 3/18 - 3/19 に 大きく動き 119000 くらいまで下がった。
やっていて感じる事、これからやっていきたい事
- “買い時"の判断材料不足なので、データを解析して、"買い"タイミングの精度をあげていきたい。
- 以前は毎10分のログで、過去10回の金額が+xxx円だったら買いという風に仕込んでいた。
- これだと買いのタイミングが遅いと判断したので、過去2回の差額が+50円だと買いにした。
- この結果、勝ちの数(買った時の金額より、売りの時の金額が高い) が増えた。
- 買いの件数も増えて、取引量が増えた。
- これだと買いのタイミングが遅いと判断したので、過去2回の差額が+50円だと買いにした。
- 以前は毎10分のログで、過去10回の金額が+xxx円だったら買いという風に仕込んでいた。
- データを解析をし、勝ち・負けの精度をあげたい
- 実際のログと、売買結果の差が起きていないか(以下の勝ち、負けが単純にログを見ただけで分析出来ていない)
- 買い注文時に、同時に+ / - の子注文を同時に行っている。
- この時に買い注文より高く売れたら “勝ち” / 低く売れたら"負け" と評価している
- 実際のログと、売買結果の差が起きていないか(以下の勝ち、負けが単純にログを見ただけで分析出来ていない)
- ソースはただ、スケジュールからバッチを叩いているだけなので、Viewで処理結果などを参照出来るようにしたい
- Rails というよりは、 ActiveRecord を使った処理を書いただけ。という印象
- ActiveRecord をRails 側から簡単に扱えるので、使っていて楽しい
- GitHub の Readme にいろいろ追記しなくては
- ENV
雑感
- 少額の取引なので、50円くらいの勝ち負けは頻繁に発生しているので、元でを増やしたいという欲を抑えながらやっている
- FXには走りたくない
- お金に関わる事で興味が強いのか、飽きずに続けられている
- 時間はかかっているが、ちょこちょこ実装を進められている
- まだまだ Ruby / Rails らしからぬコードをたくさん書いているので、お作法を覚えながらやっていきたい
- 他にも作りたい思いのアプリがあるので、第二弾、第三弾と続けて行きたい(Ruby / Rails 面白い)
- Google 図形で処理を描いてみたけど、結構ポチポチ時間がかかった。Keynote とかで作った方が速そう。
(この記事は画像作成込みで90分くらいで書いた)