kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

危機感にかられて今更Dockerを学び直す人の記録(data volumeをおさらい)

今日やること

data volume を理解し直す

data volume ってなんぞ

ボリュームは、Dockerコンテナによって生成され、使用されるデータを永続化するための推奨されるメカニズムです

docs.docker.com

Dockerコンテナの中のファイル/ディレクトリは、コンテナが終了すると削除されてしまう

そのため、永続化したいデータがあるときに、data volume を使う

data volume は、ホストのファイルシステムに作成されるディレクトリで、コンテナにマウントされる (普通は /var/lib/docker に生成されるらしい)

また、特定のホストのディレクトリと紐付けることも可能で、その場合、ホストの特定のディレクトリをコンテナから参照できる (開発環境では主にこの使い方をするはず)

data volume は、起動時の --volume (-v) オプションもしくは --mount オプションで指定する

--volume (-v) オプション

値は、: で区切られた3つの値を指定する

  • 1個目 : ホストマシン上でのpath。もしくは、名前付きボリュームを指定。省略すると匿名ボリュームになる
  • 2個目 : コンテナ上でのpath
  • 3個目 : オプション(カンマ区切り。後述)

ボリュームは、ホストマシンの特定のディレクトリと紐付かなくても作成できる

-v オプションで、: 区切りの1個目を指定しない場合、無名のボリュームが生成される。これを匿名ボリューム(anonymous volume)と呼ぶ

使いそうなオプション

  • ro: 読み取り専用(read-only)
  • cached: コンテナからの読込速度が早くなるかわりに、ホストの更新がコンテナに反映される場合に遅延が許可される
  • delegated: コンテナからの書込速度が早くなる代わりに、コンテナの更新がホストに反映される場合に遅延が許可される

cachedと、delegatedは、Docker For Mac でのディスクIOが遅いという問題を解決できると公式ドキュメントに書かれてた

docs.docker.com

--mount オプション

key=value形式で、マウント方法を指定するオプション

type=volume で、ボリュームの設定もできるらしいけど、普段あんまり使わなそうなので割愛

data volume の一覧を見る方法

$ docker volume ls

ローカルのdata volume の格納先を確認する方法

$ docker volume inspect #{volume name}

Mountpoint にpathが書かれている

Docker for mac の場合、書かれているpathは、dockerが動作しているVM上のpathなので、VMsshする必要がある

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

感想

前回書いた、dockerでrailsを動かす記事の、volumeの設定に誤りがあることを理解した

以下はdata volumeにした方が良い

kasei-san.hatenablog.com

参考

developer.feedforce.jp

  • 弊社記事。ここに書かれていることと、自分の記事の差異から、この記事が生まれた。感謝!

docs.docker.com

  • 公式ドキュメント

https://success.docker.com/article/Different_Types_of_Volumessuccess.docker.com

  • 公式。data volume の違いについて説明している

合格対策 AWS認定ソリューションアーキテクト(アソシエイト) の読書メモ 1〜5章

試験対策本を読んで、知らなかったことや曖昧だったところをメモ

合格対策 AWS認定ソリューションアーキテクト - アソシエイト

合格対策 AWS認定ソリューションアーキテクト - アソシエイト

はじめに

Design for Failure(障害に耐えうる設計) という思想

  • 単一障害点の排除
  • 全てが故障すると仮定して保守的に設計する
  • 疎結合なシステムの構築

参考になりそうなスライド

www.slideshare.net

1章: AWSと認定プログラム

AWS7つのベストプラクティス

  1. アプリケーションとSaaSプラットフォームの分離
  2. 機能は抽象化してサービス化する
  3. マルチテナントで構成する
  4. データのライフサイクルを把握する
  5. 全ての情報を収集してそこから学ぶ
  6. コストと性能の最適化を行う
  7. 高セキュリティと分離を意識する

解説スライド

資格について

f:id:kasei_san:20180228220100p:plain

  • 資格の期限は2年。再試験orランクアップ
  • 合格ラインは非公表

2章: リージョン/アベイラビリティーゾーンとAWSサービス

ELBはAZ間の負荷分散のみ。リージョンを跨ぎたければRoute53を使う

3章: 責任分担セキュリティモデルとAWSによる認証(IAM)

  • IAMロール: EC2に権限を付与する
  • ID federation: 社内の認証基盤とIAMを連携できる

責任分担セキュリティモデル

サービス毎にAWSとユーザでセキュリティの責任を分担する

4章: AWSにおけるネットワーク(VPC)

TODO: 良く分からんかったので、実際にいじって確認する

VPCは最上段のプライベートネットワークで、VPCの中に作るのがサブネット。機能毎にサブネットを作るのが理想的。

参考↓ qiita.com

  • サブネットはAZを跨がない
  • バーチャルプライベートゲートウェイ: 専用線でオンプレと繋ぐためのゲートウェイ
  • パブリックサブネット: インターネットへの接続を許可
  • プライベートサブネット: インターネットへの接続は不許可

5章: AWSにおけるコンピューティング(EC2/AMI/EBS/インスタンスストア)

  • インスタンスタイプのアルファベットの後の数字はそのインスタンスタイプの世代 (t2なら2世代目)
  • ユーザーデータ: 初回起動時に実行したい処理を設定

EBSとインスタンスストア

  • EBS: 不揮発
  • インスタンスストア: 揮発性
  • EBS backed: EBSにOSをインストールする
    • 停止、再開、再起動、削除
  • Instance Store-Backed: インスタンスストアにOSをインストールする
    • 再起動と削除のみ

EBSスナップショット

  • ディスクIOを止めてからやる。アンマウントするのがセオリー。
  • スナップショットの取得を開始したら、IOが発生しても良い
  • EBSはAZをまたげないので、EBSスナップショットをつかって移動する

プレイスメントグループ

単一AZ内の低レイテンシグループ(クラスタ)や同一ハードウェアに複数EC2インスタンスを生成して、冗長性を犠牲にネットワークを高速化する

docs.aws.amazon.com

dedicatedインスタンス

物理ホストに他のアカウントのインスタンスを起動しないことを保証するサービス

aws.amazon.com

家で作業と家事を同時にこなす「家事ポモドーロ・テクニック」がとても良かったので布教します

家で作業をすると、ついその前に部屋を片付けてしまったり、周りにある誘惑に負けて、全然作業が進まないことありませんか?

そんなときは、ポモドーロ・テクニックを使って作業と家事を交互に行うと、作業も集中できるし、家事も片付くしで一挙両得だよ! というお話です。

ポモドーロ・テクニックって?

集中して仕事をこなすために、25分毎に時間を区切って仕事をする時間管理術。Francesco Cirillo氏が1992年、自身の勉強効率を上げるために考案した。

ポモドーロテクニックとは - はてなキーワード

詳しい方法は、上記はてなキーワードの記事をご覧ください。

家事ポモドーロ・テクニックとは?

ポモドーロ・テクニックを応用して、一定時間集中して作業を行った後は、一定時間家事を行います。

自分の場合、飽きっぽいので15分で、集中して作業をした後、次の15分で家事を行っています。

そして、それを4セット(合計2時間)繰り返したら、長めの休憩を入れます。

家事ポモドーロ・テクニックの利点

実際にやってみたところ、作業を集中して行えるのはもちろんなのですが、他にも様々な利点がありました。

  • 家事が精神的報酬に 家事は肉体労働なので、頭脳労働である作業の合間に行うことで、リフレッシュできます
  • 家事の合間に、作業のアイデアが浮かぶ。作業だけを集中して行うより、より良い作業ができるようになりました。
  • 家事も作業も片付く!

細かいテクニック

  • やるべき家事をTODOリストに入れておくと、次何しようかと悩まなくて良くなります
  • 家事も仕事も中途半端で終わせると、次やる時のコンテキスト・スイッチが少なくて良いです
    • きっちり終わらせると、次やることの精神的ハードルが高くなる

そんな感じで、家事ポモドーロ・テクニック。超おすすめです!!

アジャイルな時間管理術 ポモドーロテクニック入門

アジャイルな時間管理術 ポモドーロテクニック入門

scope は、戻り値が `nil` や `false` のときも `ActiveRecord::Relation` を返す

条件式付きのscpoeをクラスメソッドに移行する際に、問題になる

例: scopeの場合

class Item < ApplicationRecord
  scope :by_name, -> name { where('name like ?', "%#{name}%") if name.present? }
end

引数の値が nil でも、 ActiveRecord::Relation がキチンと返ってくる

Item.by_name(nil).order(:created_at) #=> ActiveRecord::Relation

例: クラスメソッドの場合

class Item < ApplicationRecord
  def self.by_name(name)
    if name.present?
      where('name like ?', "%#{name}%")
    end
  end
end

この場合、Item.by_namenil を渡すとエラーが発生する

Item.by_name(nil).order(:created_at) #=> NoMethodError: undefined method `order' for nil:NilClass

どうすればよいの?

nil の代わりに all を返せば ActiveRecord::Relation が返るようになる

  def self.by_name(name)
    if name.present?
      where('name like ?', "%#{name}%")
    else
      all
    end
  end
Item.by_name(nil).order(:created_at) #=> ActiveRecord::Relation

Active Record の scope を使う必然性ってあるの?

と思って調べたら、Rails ガイドに、

スコープでのメソッドの設定は、クラスメソッドの定義と完全に同じ (というよりクラスメソッドの定義そのもの) です。どちらの形式を使用するかは好みの問題です。

と、言われたので、 特に必然性は無いらしい

ちなみに、 引数を使う場合はクラスメソッドを推奨するそうです

スコープで引数を使用するのであれば、クラスメソッドとして定義する方が推奨されます。クラスメソッドにした場合でも、関連オブジェクトからアクセス可能です。

あと、適当にぐぐったら「以前の時代は特別なものだったけど、今は別に使わなくてもよいのでは?」という話を見つけて、それもそうかという気持ちになりました

追記

こちらの記事の「追記」にあるように「 ActiveRecord::Relation を返す chainable な検索処理は scope で書く」というスタイルも、model 内でのメソッドの役割が明確になって良いのかもしれないですね

EC2の仮想化方式についてのおぼえがき

先にまとめ

  • AMI(Amazon Machine Image)の仮想化方式は、準仮想化 (PV) およびハードウェア仮想マシン (HVM) の2種類
  • 現在はHVMを推奨している
    • 公式曰く: 最適なパフォーマンスを得るために、インスタンスを起動するときには、現行世代のインスタンスタイプと HVM AMI を使用することをお勧めします
    • 特別なハードウェアサポート(拡張ネットワーキングや GPU 処理など)も受けられる
  • 旧世代のインスタンスタイプは、PVしかサポートしていない

仮想化方式とは?

  • EC2は、仮想化マシンモニタ Xen 上で動作している
  • Xenが、仮想マシンを作る方式には、HVMとPVの2種類の仮想化方式がある

PV (paravirtual。準仮想化)

実在のハードウェアを完全にエミュレートする代わりに、仮想マシン環境を実現するのに都合の良い仮想的なハードウェアを再定義する方式

メリット

  • 以前は、ハードウェア制御のオーバーヘッドが無いので、HVMとくらべて速度が早かった

デメリット

  • ハードウェアを仮想化しているので、特別なハードウェア拡張を利用できない
    • EC2だと拡張ネットワーキングや GPU 処理など

HVM (Hardware-assited VM。完全仮想化)

物理マシン用に用意されたOSをそのままXen上で動作させる方式

メリット

  • 物理マシンのハードウェアを利用できる

デメリット

  • 以前は、物理マシンのハードウェアを操作するためのオーバーヘッドにより、PVより遅かった
  • 現在は、オーバーヘッドが発生しやすい部分(IOなど)について、PVと同様のドライバを使うことで回避している(らしい)

参考

docs.aws.amazon.com

kanny.hateblo.jp

Xen (仮想化ソフトウェア) - Wikipedia

どうぶつタワーバトルを社内に普及したいのでプレゼン

この記事は feedforce Advent Calendar 2017 の 11 日目の記事です

ドーモ、社内ニンジャスレイヤー推進おじさん かせいさんです

前回は、Waka F のNY旅行の話でした。アドベントカレンダーでまさかのYouTubeでした。すごい!

www.youtube.com

さて、ニューヨーク旅行からのこちらは、みなさんご存知、どうぶつタワーバトルのお話です

アドベントカレンダーにかこつけて、どうぶつタワーバトルを社内で流行させるべく、プレゼンいたします

どうぶつタワーバトルとは!?

どうぶつタワーバトルは、12月初旬ころから爆発的に流行しているe-sportsです

f:id:kasei_san:20171211205257j:plain

どんなゲームなの

物理エンジンで構築された世界で、2人オンライン対戦でどうぶつさんを交互に積み上げて、バランスを崩して、盤の外に落としたほうが負けというゲームです。シンプル!

f:id:kasei_san:20171211112101p:plain

どうぶつタワーバトルの何がすごいか?

上で見たように、ぱっとみゆるふわな低年齢向けのパズルゲームに見えますが... 運と、技術介入要素のバランスが大変絶妙で、カードゲームやボドゲ好きな人が次々と沼に落ています

以下は沼にはまった、マジック・ザ・ギャザリングの日本人プロプレイヤーの市川佑樹さん (DTBはどうぶつタワーバトルの略称。1600-1700はレーティングで、RAGEはe-sportsのイベント名です)

運ゲーとしてのどうぶつタワーバトル

このゲーム、何も考えないでプレイすると運ゲーになります

ランダムに出るどうぶつを乗せ合うので、最終的に乗せらせられないどうぶつが出てきたプレイヤーが負けになるためですね

下の画像は、終盤に面積が広いキリンを引いた様子。これはかなり辛いです

f:id:kasei_san:20171211204304p:plain

ただ、運ゲーだからといって面白くないかというと別で、後半ギリギリの展開で何を引くか...!? というシーンではかなり手に汗を握ります...!

技術介入ゲーとしてのどうぶつタワーバトル

とはいえ、どうぶつタワーバトルは、ただの運ゲーというわけではなく、かなりの技術介入要素があります

何も考えず積むのではなく、戦略を練ることと、将棋の棋譜のようにパターンを知ることで勝率をかなり上げることができます

どんな戦略があるの

シンプルな戦略では「奇をてらったことはしない」というのがあります。対戦中やプレイ動画で見られるスーパープレイを「ようし、俺もやってやるぜ!」なんてマネすると大体死にます

しばらくは我慢して、安定する置き方を覚えましょう。レートの低いうちは、自分が死なないプレイをしていると、結構な確率で相手が自滅して勝ちになります

自分もこれに気がついてから、だいぶ勝率が上がりました

技術介入要素まとめ

そんな感じで、運ゲーに見せかけて、気付きをプレイスタイルに取り込むと、結構わかりやすく勝率が上がります

f:id:kasei_san:20171211213242p:plain

また、レーティングという形で、自分の強さが可視化されているので、数値ベースにPDCAサイクルを廻しやすいのもポイントです

運と技術介入要素のバランスの良いゲームは良ゲー

持論ですが 運と技術介入要素のバランスの良いゲームは良ゲー と思っています

なぜなら、運要素がゼロだと、強い相手には絶対に勝てないので、初心者には面白みが薄く、取っ掛かりも悪いです。また、盛り上がりにも欠けます (そっちのほうがストイックで好きという人も居ると思いますが)

また逆に、すごろくのように、運要素のみだと一時的には盛り上がりますが、すぐに飽きてしまいます

どうぶつタワーバトルや、一部のカードゲームのように運と技術介入要素のバランスが良いと、引きに一喜一憂して盛り上がりつつも、さらに、自分の工夫で勝率が上がっていくいう楽しみを得ることができます

まとめ

どうぶつタワーバトルは、ゆるふわな見た目にも関わらず、運と技術介入要素のバランスが良い

運と技術介入要素のバランスの良いゲームは良ゲー

すなわち、どうぶつタワーバトルは良ゲー

みんなもやってみよう

iPhone、アンドロイドでプレイ可能です!

どうぶつタワー

どうぶつタワー

  • Yuta Yabuzaki
  • ゲーム
  • 無料

play.google.com

明日のアドベントカレンダー

mizukmb の「新卒エンジニアの生態について」です! お楽しみに!!