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 を見ながら矢印を押してる
    • これはこのまま使っていけば、更に慣れて問題なく使えるようになりそう
  • 問題点と今思っている事
    • Mac の Keyboard と ~, | の位置が違う為、たまに混乱してる
    • 家では Mac のキーボードを使っているので、矢印を使う時に HHKB のように Fn キーを探してしまう
    • 結局なんだけど、家用の HHKB が欲しくなって来てる
      • 使っていない東プレのキーボードはオークションに出そうか迷うが、今までの感覚だとまた使う日がきそう

laradock で開発環境構築

PHP で Docker 環境作る時のコンテナ集というイメージ

laradock.io

作成してみたが、Directory の構成がまだ不明な点があるので追記予定
若干 docker-compose.yml の書き方が変わっている。qiita の情報では、Ver が少し古いのか。

参考リンク

qiita.com

追記

  • MySQL の設定は laravel directory の .env に書く
  • http://localhostURIで見る場合は、laradock/apache2/sites/default.apache.conf を書き換える
    • 忘れず docker-compose build -> up を行う
  • laradock に必要な環境変数は laradock/.env にある。 laravel / laradock がどちらも .env で管理しているので紛らわしい
  • 必要なコンテナだけ立ち上げる ( こんな感じ )
    • docker-compose up -d php-fpm apache2 mysql

Rails / Laravel の埋め込みの違い

忘れるのでメモ

Rails ( Embedded Ruby )

出力なし

<% ... %>

出力あり

<%= ... %>

使い所

<% provide(:hoge, "HOGE" %>

<p><%= yield(:hoge) %></p>

Laravel

出力なし

<?php ... ?>

出力あり

{{ ... }}

使い所

<?php $hoge='hoge' ?>

<p>{{ $hoge }}</p>

調べなくては

Laravel で Rails の provide に当たるヘルパーはないのか?
そもそもモデルで書けと思うところだが。

ライトコートエブリデーる

タイトルで言いたい事はすべて言ってしまっているが、補足も兼ねて今やっている事を。

Write Code Everyday

  • 日々何かしらのコードを書き、Commit する。GitHubに草を生やす
  • 2015年もやっていたが、51days くらいで止まった
    • 当時は妻が実家に帰省していた かつ、子どもに使って欲しいとアプリのコードを書くモチベーションがあった

現在

  • ちょうど 3weeks を超えたところ
  • 少し癖になってきたので、次の(たぶん 3ヶ月)ポイントまでの目標と今考えている事のまとめ

f:id:tbrhdys:20170321145550p:plain

なぜ始めたか

  • こんな事書き始めたら Wantedly みたいだ
  • いろいろな不安と戦う為に前に進んでいる感覚が欲しい
  • 家族との時間を大切にしたいので、週末にまとめて一気に時間を確保するという事を避けたい
  • 前回の51days を超えたい
  • 少しでも新しい事を始めたい
  • 昨年末に参加したBuilderscon の mattn さんの言葉
    • Q いつ時間を作るんですか? A とにかく頑張るしかない
    • Q なぜ頑張るか A 若い人たちに勢いだけは負けたくない
  • 実際にBTCのアプリ(かなり雑な感じだが)は、日々触る事で少しずつ形になった
  • 作りたいアプリはあるが、なかなか自分に言い訳をして進められていない

試したこと

  • BitCoinRails アプリ
  • Electron + Vue.js
  • Vue.js + Laravel のサンプル RSS リーダを触った
  • Vimrc をちょこちょこ

次に書く内容

  • 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を触るという事があったので、少し調べて実装の繰り返し。

github.com

作った仕組み

  • Batch を毎10分で実行し、ログから"買い時"と判断したら、買いと売り注文を出す
  • Log も毎10分で実行し、過去数時間経過した注文の結果を取得し、結果モデルを作成
  • Result は1日1回実行し、結果を集計し、メールで結果を知らせる
  • Gabage は Heroku の Free プランの上限を超えないよう PostgreSql のレコードを削除する
  • 概要はこんな感じ f:id:tbrhdys:20170320000435j:plain

現在の結果

  • 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円だと買いにした。
        • この結果、勝ちの数(買った時の金額より、売りの時の金額が高い) が増えた。
        • 買いの件数も増えて、取引量が増えた。
  • データを解析をし、勝ち・負けの精度をあげたい
    • 実際のログと、売買結果の差が起きていないか(以下の勝ち、負けが単純にログを見ただけで分析出来ていない)
      • 買い注文時に、同時に+ / - の子注文を同時に行っている。
      • この時に買い注文より高く売れたら “勝ち” / 低く売れたら"負け" と評価している
  • ソースはただ、スケジュールからバッチを叩いているだけなので、Viewで処理結果などを参照出来るようにしたい
    • Rails というよりは、 ActiveRecord を使った処理を書いただけ。という印象
    • ActiveRecordRails 側から簡単に扱えるので、使っていて楽しい
  • GitHub の Readme にいろいろ追記しなくては
    • ENV

雑感

  • 少額の取引なので、50円くらいの勝ち負けは頻繁に発生しているので、元でを増やしたいという欲を抑えながらやっている
    • FXには走りたくない
  • お金に関わる事で興味が強いのか、飽きずに続けられている
    • 時間はかかっているが、ちょこちょこ実装を進められている
  • まだまだ Ruby / Rails らしからぬコードをたくさん書いているので、お作法を覚えながらやっていきたい
  • 他にも作りたい思いのアプリがあるので、第二弾、第三弾と続けて行きたい(Ruby / Rails 面白い)
  • Google 図形で処理を描いてみたけど、結構ポチポチ時間がかかった。Keynote とかで作った方が速そう。

(この記事は画像作成込みで90分くらいで書いた)