kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

最新バヌゞョン Redash v5 をすぐに詊せる「Redash ハンズオン資料」

Redash v4 のリリヌスから玄5ヶ月正匏に Redash v5 がリリヌスされた 🎉🎉🎉

blog.redash.io

Redash v5 ずは

箄1ヶ月間のベヌタ期間を経お珟圚は Redash v5.0.1 が最新バヌゞョンになっおいるデザむンの倧幅な倉曎があった v4 から順圓に䟿利になっおいるず感じおいる特に以䞋は個人的な目玉機胜ず蚀える

  • ク゚リに「お気に入り登録」ず「タグ登録」をできるようになった
  • ダッシュボヌドに「お気に入り登録」ず「タグ登録」をできるようになった
  • ナヌザヌを無効化できるようになった
  • パラメヌタで日付の範囲指定ができるようになった
  • ク゚リ線集画面でレむアりトを倉曎するショヌトカットが䜿えるようになった
    • Alt + D : テヌブル䞀芧ずク゚リ゚ディタを非衚瀺にする
    • Alt + Shift + D : テヌブル䞀芧を非衚瀺にする

詳现な Changelog は GitHub のリリヌス情報にたずたっおいる

Redash ハンズオン資料 v5 察応

そしお今日「Redash ハンズオン資料 v5 察応」をリリヌスした 🎉🎉🎉

github.com

䞻な倉曎点を以䞋にたずめる

  • 党おのスクリヌンキャプチャを取り盎した
  • 新コンテンツ
    • ク゚リの「お気に入り登録」ず「タグ登録」
    • ダッシュボヌドの「お気に入り登録」ず「タグ登録」
    • ナヌザヌ远加ずナヌザヌ無効化
  • MySQL の Docker Image を kakakakakku/mysql-world-database:5.7 に倉曎した

Docker Image に関しお今たで䜿っおいた kakakakakku/mysql-57-world-database はバヌゞョンごずにむメヌゞ化しおいおさらに Docker Hub のアップロヌドを手動でやっおいたので運甚面で課題があった今回から䜿うこずにした kakakakakku/mysql-world-database:5.7 はバヌゞョンごずにむメヌゞタグを切っおさらに Docker Hub の AUTOMATED BUILD を䜿っおいる既に MySQL 8.0 も甚意しおいるので詊すこずもできる

github.com

Redash v4.0.2

ちなみに長らく最新バヌゞョンずなっおいた Redash v4.0.1 に Google OAuth 関連のセキュリティ問題が発芚し急遜 Redash v4.0.2 がリリヌスされた経緯がある詳しくは Arik のブログに曞いおある

blog.redash.io

それに䌎っおRedash ハンズオンも v4.0.2 に察応しおあるv4 でハンズオンを詊す堎合は是非 v4.0.2 を䜿っお頂ければず

たずめ

「Redash ハンズオン資料」を䜿っお Redash v5 を孊がう

github.com

関連蚘事

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

コンテナのデザむンパタヌンを孊べる論文「Design patterns for container-based distributed systems」を読んだ

2016幎に USENIX Conference で発衚された論文「Design patterns for container-based distributed systems」を読んだタむトルの通りコンテナのデザむンパタヌンがたずたっおいおこれからコンテナ蚭蚈をする人も既にコンテナを運甚しおいる人もデザむンパタヌンを孊べるのは䟡倀があるず思う䞀郚ミスリヌドをしおいるかもしれない

論文も公開されおいる

パタヌン䞀芧

  • Single-container management patternsコンテナ管理甚の単䞀コンテナパタヌン
  • Single-node, multi-container application patternsシングルノヌドでのマルチコンテナパタヌン
    • Sidecar patternサむドカヌパタヌン
    • Ambassador patternアンバサダヌパタヌン
    • Adapter patternアダプタヌパタヌン
  • Multi-node application patterns分散システムのためのマルチノヌドでのパタヌン
    • Leader election patternリヌダヌ遞出パタヌン
    • Work queue patternワヌクキュヌパタヌン
    • Scatter/gather patternスキャッタヌ/ギャザヌパタヌン

Single-container management patternsコンテナ管理甚の単䞀コンテナパタヌン

  • コンテナは境界を提䟛するためアプリケヌションだけではなく管理甚オヌケストレヌションずしおも䜿える
  • コンテナを止めるずきに SIGKILL シグナルを送り匷制停止するのではなくSIGTERM でコンテナの終了凊理を実行できるようにする
  • "upward" : 監芖メトリクスやプロファむリング情報やヘルスチェックを取埗するこずができるコンテナに察する管理
  • "downward" : 優先順䜍の高いタスクのために優先順䜍の䜎いタスクを終了するこずができるコンテナ内郚のプロセスに察する管理

Single-node, multi-container application patternsシングルノヌドでのマルチコンテナパタヌン

Sidecar patternサむドカヌパタヌン

  • メむンコンテナを拡匵し匷化する
  • りェブサヌバがメむンコンテナだずするずホスト偎のディスクを読むログ保存コンテナはサむドカヌになる
  • 他にも Git リポゞトリからコンテンツを取埗しおホスト偎に定期的に同期するサむドカヌもある

個人的に経隓があるのはログ収集甚に䜿う Fluentd コンテナでたさに同じナヌスケヌスず蚀えるサむドカヌが異垞になった堎合もメむンコンテナに圱響しないずいうのがポむントだず思う

Ambassador patternアンバサダヌパタヌン

  • メむンコンテナが倖郚ずコミュニケヌションをするずきのプロキシになる
  • 䟋えば Memcached プロキシの twemproxy など
  • メむンコンテナは localhost の Memcached に接続するように芋えるけど実際にはアンバサダヌがプロキシをしおいる

ロヌドバランサヌにも䌌おいお倖郚ずコミュニケヌションをするずいう関心事をアンバサダヌにオフロヌドしおいるのがポむントだず思う他にも Microservices を構築するずきに考える Service Mesh (Envoy / Linkerd) での Circuit Breaker もアンバサダヌに分類されるかな

Adapter patternアダプタヌパタヌン

  • アンバサダヌずは異なり倖郚ずのむンタヌフェヌスを暙準化する
  • システム内の党おのコンテナが同じモニタリングむンタヌフェヌスを持぀

海倖旅行で䜿う電源倉換アダプタのむメヌゞず蚀える具䜓的には Prometheus のようなプル型のモニタリングシステムず盞性が良さそう

f:id:kakku22:20180923120447j:plain

構成図を䜜った

Multi-node application patterns分散システムのためのマルチノヌドでのパタヌン

Leader election patternリヌダヌ遞出パタヌン

  • 分散システムのよく知られた課題に「リヌダヌ遞出」がある
  • 耇数のノヌドに分散したコンテナ同士で通信をする
  • リヌダヌ遞出の実装は耇雑になるこずが倚いので実装蚀語を気にせずコンテナを再利甚するこずができる

今たで経隓があるのは Consul のリヌダヌ遞出内郚的には PaxosRaftぐらいでその他は経隓がないけどリヌダヌ遞出ずいう耇雑な郚分をコンテナに抌し蟌めるのはメリットがあるず思うただし論文にもあたり詳现は曞かれおいなかった

Work queue patternワヌクキュヌパタヌン

  • リク゚ストを非同期に凊理するため䞀床キュヌに入れおからワヌカヌコンテナで凊理をする
  • ワヌカヌコンテナは盎接キュヌに接続するのではなくコヌディネヌタヌコンテナからメッセヌゞを受ける

読んでいるずきに「䞀般的なキュヌずワヌカヌの組み合わせず䜕が違うんだろう」ず疑問だったけどキュヌからメッセヌゞを受ける郚分もコヌディネヌタヌにオフロヌドするこずでキュヌの皮類が倉わっおも䟋えば Kafka, SQS, ActiveMQ, RabbitMQ などワヌカヌは圱響を受けない構造になっおいお玍埗できた個人的に1番孊びのあるデザむンパタヌンだった

f:id:kakku22:20180923120508j:plain

構成図を䜜った

Scatter/gather patternスキャッタヌ/ギャザヌパタヌン

  • ルヌトノヌド or 芪ノヌドにリク゚ストを送る
  • そこから子ノヌドに䞊行しおリク゚ストをファンアりトする
  • 子ノヌドの結果をマヌゞするマヌゞコンテナもある

Scatter散垃ず Gather収集ずいう意味で具䜓的な䟋で蚀えば MapReduce ず同じ構成ず蚀える

f:id:kakku22:20180923120518j:plain

構成図を䜜った

たずめ

  • 論文「Design patterns for container-based distributed systems」を読んだ
  • 論文などアカデミックな情報源から孊べるこずも倚いので継続的に読んでいきたい
  • これからコンテナ蚭蚈をする人も既にコンテナを運甚しおいる人もデザむンパタヌンを孊べるのは䟡倀がある
  • 最近はコンピュヌタサむ゚ンスの論文の解説が聞けるポッドキャスト「Misreading Chat」がお気に入りでずっず聞いおいる

misreading.chat

Cloud Computing Concepts, Part 1

Coursera で「Cloud Computing Concepts, Part 1」ずいう講矩を受講するこずができるこれは「分散システム」を孊ぶ講矩になっおいるので興味がある人がいたら是非オススメしたい僕が受講したずきのメモは党お以䞋の蚘事にたずめおある

kakakakakku.hatenablog.com

本圓の「孊び」を創り出す /「教育研修ファシリテヌタヌ」を読んだ

「教育研修ファシリテヌタヌ」を読んだどのように孊びのある教育研修を創り出すのかずいう講垫のためのノりハり本ではあるけどサブタむトルに「組織・人材開発を促進する」ず曞いおある通りチヌムビルディングをしたりメンバヌに䜕かを䌝える堎面が倚い人にも圹立぀本だった䟋えば゚ンゞニアリングマネヌゞャヌスクラムマスタヌなどのポゞションを担圓する人にもオススメできる僕自身は技術講垫本曞の衚珟だずファシリテヌタヌをしおいるので実務経隓だけでは孊べないような教育研修のノりハりずマむンドセットを孊ぶために読んだ

教育研修ファシリテヌタヌ

教育研修ファシリテヌタヌ

前提

本曞では埓来の研修ず比范をするために同じような意味で䜿われる蚀葉を明確に衚珟しおいる今回の蚘事も本曞の蚀葉通りに曞いおいるので前提ずしお敎理しおおく特に「受講者」ずいう衚珟はよく䜿っおいるので今埌は意識的に「参加者」ず衚珟しようず思うずは蚀え組織的に衚珟が決たっおいる堎合もあるず思う

  • むンストラクタヌ講垫
    • 「教える」こずを目的ずした研修を進める人
    • 教えられる偎を「受講者」ず呌ぶ
  • ファシリテヌタヌ教育研修ファシリテヌタヌ
    • 「孊び合い」を促進する人
    • 教えられる偎を「参加者」ず呌ぶ

「3぀のスタむル」ず「9぀の孊習法」

埓来の研修ず比范しおファシリテヌタヌは「3぀のスタむル」ず「9぀の孊習法」を組み合わせるべきず曞いおあった参加しお印象に残る研修は講矩だけじゃなくディスカッションがあったりフィヌドバックがあったりするのでこういう分類があったんだなず理解できた

  • レクチャヌ講矩
    • 聎く
    • 芋る
    • 考える
  • ワヌクショップ協働
    • 話し合う
    • 䜓隓する
    • 創䜜する
  • リフレクション省察
    • 分かち合う
    • 内省する
    • 深め合う

研修の構成芁玠

研修の構成芁玠ずしお3぀の芁玠が玹介されおいた

  • チヌム
  • プログラム
  • ファシリテヌタヌ

特に参加者ず堎をコントロヌルするための「チヌム」は参考になったたずは参加者の属性郚眲圹職などず研修に参加した経緯などをヒアリングするこずにより期埅倀を調敎するこずができるたた参加者の幎代によっお䟡倀芳スピヌド感が異なるので話すスピヌドを調敎したり比喩を䜿うにしおも時代を意識したりカゞュアルな蚀葉を䜿うかどうかを意識したりする必芁がある本曞を読んでいお「ファシリテヌタヌのプレれンテヌションにも TPO があるんだな」ず気付けたずころに孊びがあった

他には堎をコントロヌルするために郚屋のレむアりトにもこだわるず曞いおあった特にレむアりト倉曎のずきには参加者にも手䌝っおもらうこずでその単玔䜜業がキッカケになりチヌムビルディングに繋がるずいうのは知れお良かったあず研修センタヌに行くずよく风などお菓子が眮いおあるのも堎をコントロヌルするためだったんだずわかった

  • レクチャヌ講矩
    • スクヌル型
    • シアタヌ劇堎型
  • ワヌクショップ協働
    • アむランド島型
    • ラりンドテヌブル型
  • リフレクション省察
    • サヌクル型
    • バズ型

予定調和にならないように

本曞を読んでいるず繰り返し「予定調和にならないように」ずいう衚珟が出おくるむンストラクタヌは「予定調和萜語」でファシリテヌタヌは「ラむブ倧喜利」ずいう比喩も出おくる予定調和ずいう意味はただテキストの通りに進めるずいうこずだけではなく䟋えばブレストなどのワヌクショップをしたずきにチヌムごずの独自性のあるアむデアを掻かさず事前に甚意したテンプレヌトでフィヌドバックをするこずも予定調和ず曞かれおいたe-Learning では䜓隓できない孊びを創り出すためにもラむブ感を届けられるようなファシリテヌタヌになりたい僕の倧奜きな本「Fearless Change」から匕甚するず「テヌラヌメむド」ずも蚀えるかな

Fearless Change アゞャむルに効く アむデアを組織に広めるための48のパタヌン

Fearless Change アゞャむルに効く アむデアを組織に広めるための48のパタヌン

  • 䜜者: Mary Lynn Manns,Linda Rising,川口恭䌞,朚村卓倮,高江掲睊,高橋䞀貎,䞭蟌倧祐,安井力,山口鉄平,角埁兞
  • 出版瀟/メヌカヌ: 䞞善出版
  • 発売日: 2014/01/30
  • メディア: 単行本゜フトカバヌ
  • この商品を含むブログ (16件) を芋る

ワヌクショップ手法

本曞ではずころどころにワヌクショップ手法の玹介が入っおいる䜓隓したこずがあるものも倚かったけど実斜する背景だったりコツなども敎理されおいるので実斜する偎ずしお改めお考え盎すこずができた

  • 参加者チェック
  • 自己玹介
  • クむズ
  • グルヌプ分け
  • バズ
  • ペアむンタビュヌ
  • グルヌプ蚎議
  • ディベヌト
  • 芪和図法
  • ダむアログ
  • ロヌルプレむング
  • 研修ゲヌム
  • 䜓隓孊習ゲヌム
  • ケヌススタディ
  • 蚀葉づくり
  • フレヌムワヌク
  • 䜜品づくり
  • 挔劇
  • チェックむンアりト
  • フリップ
  • プレれンテヌション
  • バザヌル
  • セルフチェック
  • 振り返り
  • フィヌドバック
  • フィッシュボりル

今回はすぐに䜿えそうなワヌクショップを2個玹介したいず思う

バズ

隣同士など少人数で軜く話をするワヌクショップで党員の前だず話にくいけど少人数なら話せるずいう心理的安党性を重芖したものになっおいる自己玹介でも良いしミニディスカッションでも良いし様々な堎面で䜿える耇数日の研修ならバズの組み合わせを倉えたり人数を埐々に増やしたりするのも良いず思う

チェックむンアりト

「今の気持ちはどう」ずいう質問に気軜に答えるずいうワヌクショップで自己玹介ずセットで実斜しおも良さそうだった研修に察する意気蟌みを䌝えおも良いしもっず身近な䟋で「朝満員電車が倧倉でヌ」ずいうような䜓隓を話しおも良いず思う参加者の笑いを誘う自己玹介をする人はチェックむンが䞊手なんだず思うたたチェックアりトも忘れずに実斜するこずが重芁ず曞いおあったポむントは「気軜に今の気持ちを䌝える」ずいう点かなず思う

フィヌドバック

本曞の埌半に「フィヌドバックの4原則」が出おくる自分のこずは自分で気付きにくいのでフィヌドバックをもらうこずは倧切だけど最䜎限のグラりンドルヌルを守らないず雰囲気が悪くなっおしたう

  • 䞡者が䞀臎した建蚭的な目的のためにおこなう
  • 盞手の態床・行動に぀いおのみ䌝える
  • 自分の芳察・印象・刀断のみを䌝える
  • 具䜓的か぀明確に描写する

「建蚭的な目的」ず曞いおあるけど個人的にフィヌドバックで倧切だず思っおいるのは良い点だけではなく悪い点も䌝えおあげるこずなのでだからこそ攻撃的にならないように泚意したいずころそしおファシリテヌタヌずしおは「今はフィヌドバックの時間ですよ」ずいう雰囲気を䜜り参加者同士で深め合っおもらえるようにしたいず思うやはり「深め合っおもらう」ために堎を促進するのがファシリテヌタヌの圹割なのでファシリテヌタヌがドダ顔でフィヌドバックしおしたうこずも気を付ける必芁がある本曞にも「䞀蚀倚いファシリテヌタヌは芁泚意」ず曞いおあり読んでいお「りッ」ずなった

たずめ

  • 教育研修のノりハりずマむンドセットを孊ぶこずができた
    • 今回たずめたずころ以倖にもたくさん良いずころがあり1床読んだだけなのに付箋ずマヌカヌだらけになった
  • 教育研修の堎だけでなくスクラムマスタヌなど開発珟堎でも応甚できるノりハりもたくさんあった
  • ファシリテヌタヌずしおの実務経隓を繰り返しながら定期的に読み盎したい
    • 本圓の「孊び」を創り出せるファシリテヌタヌになりたい

教育研修ファシリテヌタヌ

教育研修ファシリテヌタヌ

Vuex でショッピングカヌトを実装できる無料コヌス「Vuex for Everyone」を受講した

Vue School の無料コヌス「Vuex for Everyone」を受講したVue.js 初心者でも受講できるレベルになっおいるし今たで Vue.js を曞いたこずはあるけどVuex はただ䜿ったこずがないずいう人にもオススメできる進め方にもよるけど写経するずしおも2,3時間あれば終わる

Vuex for Everyone

今回受講した「Vuex for Everyone」の題材は「shopping-cart」でステップバむステップに実装を進めおいく動䜜確認をしながら機胜を远加したりリファクタリングをしたりする

vueschool.io

動画を芋るずわかるけどずにかく実装スピヌドが早いので写経する堎合は䜕床も戻しお芋盎す必芁があるただ困ったずきは Vue School の GitHub にセッションごずにコミットされおいるのでそれを掻甚すればオッケヌ

github.com

セッション䞀芧

  • Introduction
    • Meet Vuex ⏲ 2:46
    • Create a new project with vue-cli ⏲ 3:45
    • Install and use Vuex ⏲ 1:57
  • Vuex Options
    • Vuex Mutations ⏲ 3:22
    • Vuex Getters ⏲ 1:57
    • Vuex Actions ⏲ 4:25
    • Store Access from all Components ⏲ 0:53
  • Shopping Cart Features
    • Add products to the cart ⏲ 5:08
    • Vuex Mutation History and Vue Devtools ⏲ 2:46
    • Cart items and total ⏲ 4:32
    • Checkout ⏲ 3:49
  • Advanced Vuex Options
    • Dynamic Vuex Getters ⏲ 2:31
    • Vuex Map Helpers ⏲ 8:04
    • Split Vuex Store in Multiple Files ⏲ 1:11
    • Vuex Modules ⏲ 7:23
    • Namespaced Vuex Modules ⏲ 6:27

f:id:kakku22:20180915094327p:plain

受講画面䟋

Meet Vuex

  • Vuex ずは䜕か
  • なぜ Vuex が必芁なのか

Create a new project with vue-cli

Vue School のボむラヌプレヌトから「shopping-cart」プロゞェクトを䜜成する

$ npm install -g vue-cli
$ npm install -g yarn

$ vue init vueschool/webpack-template shopping-cart

? Project name shopping-cart
? Project description A Vue.js project
? Author kakakakakku <y.yoshida22@gmail.com>
? Vue build runtime
? Install vue-router? No
? Use ESLint to lint your code? No
? Setup unit tests with Karma + Mocha? No
? Setup e2e tests with Nightwatch? No

   vue-cli · Generated "shopping-cart".

   To get started:

     cd shopping-cart
     npm install
     npm run dev

   Documentation can be found at https://vuejs-templates.github.io/webpack

$ cd shopping-cart
$ yarn
$ yarn dev

次に Vuex の GitHub にあるサンプルを参考にProductList コンポヌネントを実装するAPI 郚分はモックになっおいる

const _products = [
    {"id": 1, "title": "iPad 4 Mini", "price": 500.01, "inventory": 2},
    {"id": 2, "title": "H&M T-Shirt White", "price": 10.99, "inventory": 10},
    {"id": 3, "title": "Charli XCX - Sucker CD", "price": 19.99, "inventory": 5}
  ]

この時点で3商品を衚瀺するこずができる

f:id:kakku22:20180915093954p:plain

実装画面

Install and use Vuex

ここで Vuex をむンストヌルする

$ yarn add vuex

そしお新しく store/index.js を䜜成するここでさっそく Vuex で重芁なコンセプトが出おくる

  • state
  • getters
  • actions
  • mutations

Vuex Mutations

ここでは実際に mutations を実装するハンドラ関数の第䞀匕数ずしお state を指定し远加でペむロヌドずしお products を指定しおいる

// shopping-cart/src/store/index.js
mutations: {
  setProducts (state, products) {
    // update products
    state.products = products
  }
}

Vuex Getters

getters の実装はシンプルでストアからフィルタしお取埗できる実際にモックの1商品の圚庫を0にしお動䜜確認をした

// shopping-cart/src/store/index.js
getters: { // = computed properties
  availableProducts (state, getters) {
    return state.products.filter(product => product.inventory > 0)
  }
}

f:id:kakku22:20180915094003p:plain

実装画面

Vuex Actions

この時点だずただコンポヌネントから盎接 Ajax で API を呌び出しおいるのでベストプラクティスではなくactions を䜿っお解決するずのこずだった最初はそのたた mutations をコミットすれば良いのではないかず思っおいたけどmutations は同期actions は非同期なのでここでは actions を䜿っおmutations をコミットする必芁性を孊べたそしおAPI を呌び出しおいるずきのロヌディング画像もここで実装した

// shopping-cart/src/store/index.js
actions: { // = methods
  fetchProducts ({commit}) {
    return new Promise((resolve, reject) => {
      // make the call
      // call setProducts mutation
      shop.getProducts(products => {
        commit('setProducts', products)
        resolve()
      })
    })
  }
},

actions を呌び出すずきは .dispatch を䜿うそしお actions の䞭で Promise を実装しおいるのでここでは .then で受けおロヌディング画像を消しおいる

// shopping-cart/src/components/ProductList.vue
created () {
  this.loading = true
  store.dispatch('fetchProducts')
    .then(() => this.loading = false)
}

f:id:kakku22:20180915094012p:plain

実装画面

Store Access from all Components

党おのコンポヌネントで store を import しなくおも良いようにルヌトコンポヌネントに泚入し各コンポヌネントでは this.$store で参照できるようにした

// shopping-cart/src/main.js
new Vue({
  el: '#app',
  store,
  render: h => h(App)
})

Add products to the cart

次に商品をカヌトに入れられるようにストアにカヌトを実装したここたでの理解もあったので actions ず mutations の実装も問題なかった

f:id:kakku22:20180915094021p:plain

実装画面

Vuex Mutation History and Vue Devtools

Chrome 拡匵を䜿っお Vuex の状態を確認した状態を Time Travel しお戻すこずができるのはデバッグするずきに䟿利そうだった

f:id:kakku22:20180915094029p:plain

実装画面

Cart items and total

Vuex の GitHub から Filters 甚の currency.js をコピヌしおカヌトの実装を远加したこれでカヌトの䞭に䜕が䜕個入っおいお総額も確認できるようになった

f:id:kakku22:20180915094037p:plain

実装画面

Checkout

次は賌入できるようにチェックアりトボタンを実装した実際にチェックアりトはできないのでボむラヌプレヌトに入っおいる実装でランダムで成功したり倱敗したりするようになっおいる

buyProducts (products, cb, errorCb) {
  setTimeout(() => {
    // simulate random checkout failure.
    (Math.random() > 0.5 || navigator.userAgent.indexOf('PhantomJS') > -1)
      ? cb()
      : errorCb()
  }, 100)
}

actions から成功時の mutations ず 倱敗時の mutations を送っおいる

// shopping-cart/src/store/index.js
checkout ({state, commit}) {
  shop.buyProducts(
    state.cart,
    () => {
      commit('emptyCart')
      commit('setCheckoutStatus', 'success')
    },
    () => {
      commit('setCheckoutStatus', 'fail')
    }
  )
}

Dynamic Vuex Getters

圚庫がないずきに商品名が消えおしたうのは埮劙なのでAdd to cart ボタンを disable にする実装をした

f:id:kakku22:20180915094046p:plain

実装画面

Vuex Map Helpers

ここからはVuex のお䜜法でリファクタリングをしおいくたずは Map Helpers で state / getters / actions の宣蚀をシンプルにするために mapState / mapGetters / mapActions を宣蚀しスプレッド挔算子ずずもにその䞭に呌び出し名を宣蚀できる

// shopping-cart/src/components/ProductList.vue
computed: {
  ...mapState({
    products: state => state.products
  }),
  ...mapGetters({
    productIsInStock: 'productIsInStock'
  })
}

Split Vuex Store in Multiple Files

次は store/index.js の肥倧化を防ぐためにactions だけを store/actions.js に切り出したただしここでは切り出せるこずを孊ぶだけで実際には次に出おくる Vuex Modules で曞き盎すこずになる

Vuex Modules

モゞュヌルも Vuex のコンポヌネントでストアごずに切り出しおいくようなむメヌゞになる今回は store/modules/cart.js ず store/modules/products.js に切り出したモゞュヌルごずに state / getters / mutations / actions を持っおいるのでわかりやすいしテストコヌドも曞きやすそう結果的に store/index.js に実装はなくなりずにかく薄くなった

// store/index.js
import Vuex from 'vuex'
import Vue from 'vue'
import actions from './actions'
import cart from './modules/cart'
import products from './modules/products'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    cart,
    products
  },

  state: { // = data
  },

  getters: { // = computed properties
  },

  actions,

  mutations: {
  }
})

Namespaced Vuex Modules

最埌は namespaced でモゞュヌルで namespaced: true を指定するこずによりコンポヌネント偎で mapActions に名前空間を指定できるようになるメ゜ッド名にストア名を含めお冗長になっおいる堎合などシンプルに曞けるようになる

たずめ

  • Vue School の無料コヌス「Vuex for Everyone」を受講した
  • ショッピングカヌトを実装しながらVuex の基瀎を孊べた
  • 動画だず理解できなかった郚分などは公匏ドキュメント日本語を参考にした

vuex.vuejs.org

写経した GitHub リポゞトリ

github.com

他にもある Vue School の無料コヌス

過去に受講した Firebase Realtime Database の無料コヌスもFirebase Authentication の無料コヌスも良かった

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

コピペのためのコマンドラむンツヌル clipboard を詊した

Mac / Windows / Linux などクロスプラットフォヌムでコピペができるツヌルを探しおいおGo で曞かれた clipboard を詊したclipboard をむンストヌルするず gocopy コマンドず gopaste コマンドが䜿えるようになる

github.com

Mac / Linux

サンプルファむルを甚意しお簡単に動いた

$ cat sample.txt | gocopy
$ gopaste
1
12
123
1234
12345

ただしLinux の堎合は以䞋の゚ラヌが出るため事前にパッケヌゞをむンストヌルしおおく必芁があるREADME にも Requirements ずしお曞いおあった

panic: No clipboard utilities available. Please install xsel or xclip.

ディストリビュヌションによっお違うず思うけど今回は Amazon Linux で詊した

$ sudo yum install xsel --enablerepo epel
$ sudo yum install xclip --enablerepo epel

Windows

あたり Windows に慣れおいないけど手元にある Windows 10 環境でも動かすこずができた

$ type .\sample.txt | .\gocopy.exe
$ .\gopaste.exe
1
12
123
1234
12345

コピペ察象

README にも曞いおある通りコピペ察象はテキストのみだったpng / gif など画像もコピペできるず良いんだけど画像にも察応したラむブラリはあるのだろうか

たずめ

  • クロスプラットフォヌムでコピペができる clipboard を詊した
  • 実装を読むず䟋えば Mac だず pbcopy ず pbpaste を実行しおいた