Furyu
[フリュー公式]

Tech Blog

フリュー株式会社の技術ブログです

2019年12月6日

kakuda.takumi

JJUG CCC 2019 Fallに参加&登壇してきました!!

こんにちは。ピクトリンク事業部の角田です。
2019年11月23日(土)に開催されましたJavaのカンファレンスであるJJUG CCC 2019 Fallに参加&登壇してきましたので報告させていただきます。
弊社はこちらのカンファレンスのゴールドスポンサーをさせていただき、スポンサーセッションという枠で登壇もさせていただいておりました。

JJUG CCCとは?

公式サイトより引用

JJUG CCCは毎年2回、春と秋に開催する日本最大のJavaコミュニティイベントです。
Java関連の技術や事例に関する良質なセッションが行われ、また異なる分野で活躍するJava技術者が一堂に会する場ともなっています。

Javaのリリースサイクルの変更に伴い、JJUG CCCの開催も半年に1回となりました。
日本の方々だけではなく、海外の著名な方々も多数参加されているということもあり、日本のJavaのイベントでは最大級のものとなっております。

 

会場の様子

iOS の画像 (3)

IMG_20191123_142305213

私にとって4度目の参加となるJJUG CCC。毎回セッションにテーマがあるように感じており、今回はサーバレス時代におけるJavaについて語られているセッションが多かった印象でした。以下が私が聴講してきたセッションのまとめとなります。

 

Coding That Sparks Joy with Quarkus (Edson Yanaga)

JavaチャンピオンであるEdson Yanagaさんの発表でした。Javaの有名なフレームワークというとSpring Frameworkが思いつく方が多いかもしれませんが、最近は様々な他の選択肢が出てきました。今回はその内の1つであるQuarkusについての話でした。
今までJavaは起動速度やメモリ使用量に対してそこまで意識しなくてもよい世界にいました。しかしながら、サーバレス時代になってきた今、そうもいかなくなってきました。
オートスケーリングさせるために出来るだけ起動速度を早くしなければならなく、現状Spring Bootなどの全部入りのフレームワークでは厳しいところもあります。
そういった時代にJavaもついていくためにもQuarkusのようなフレームワークが誕生しました。
Quarkusはアプリケーションの起動速度を削減しただけではなく、メモリ使用量の削減、また小さなサイズのコンテナイメージを作成することができます。
Edsonさんの発表ではQuarkusの凄さをライブコーディングで伝えてました。
私自身Quarkusに関する知識不足でQuarkusの凄さの全容を知ることができませんでしたが、とても使ってみたいという気持ちになりました!

 

Javaで学ぶオブジェクト指向プログラミングの基礎知識 (増田 亨)

「現場で役立つシステム設計の原則」の著者である増田亨さんによる発表でした。聴講の対象者としては、オブジェクト指向プログラミング初心者とのことでしたが、
増田さんの発表は毎回得るものが多く、改めてオブジェクト指向プログラミングというものを考えてみようということで聴講させていただきました。
今回のキーワードは「型」、「カプセル化」でした。それぞれのキーワードについてとても丁寧に説明されており、
自身が普段心がけていたことが間違っていなかったと再確認することができました。
オブジェクト指向プログラミングには2つのモード(モード1とモード2)があります。モード1はJava標準の型だけ使い、モード2は独自の型を自身で定義するものとのことです。
増田さんは本当のオブジェクト指向プログラミングの旨味はモード2にあり、型の消費者ではなく型の生産者になることが重要とおっしゃってました。
この言葉を忘れず日々努力していきたいと感じました。

 

開け!ドメイン駆動設計の扉(成瀬 允宣)

GMOインターネットの成瀬允宣さんの発表でした。私自身、今年の春のCCCの時に成瀬さんのドメイン駆動設計のお話を聴かせていただいてとてもわかりやすかったため、今回はドメイン駆動設計を周りの人に知ってもらうためにこちらの発表を聴かせていただきました。
今回の内容は、ドメイン駆動設計に興味はあるけど、Eric Evans氏の書籍に手を出すのは、、、という方向けの発表でした。
私自身も同じような感じで興味があったけど、なかなかあの厚さの書籍に手を出せなかった時期もあったので、こういった発表は初学者にとっては後押しとなり嬉しいと感じました。
最近になってドメイン駆動設計が流行りだした理由としては、10年ほど前にドメイン駆動設計にトライしたプロジェクトが今になって変更に耐えうるものになってきて、それが注目されだしたかららしいです。
話の内容としてはこの前に聞いた増田さんの「Javaで学ぶオブジェクト指向プログラミングの基礎知識」と結構かぶるところもあり、オブジェクト指向プログラングをしっかりしていれば対応できるようなところもあるように感じました。
ドメイン駆動設計において一番大事なことはドメインエキスパートとの会話がとても大切で、当たり前のことを当たり前にやることであるらしいです。確かに当たり前のことを当たり前にやること自体が1番難しいことなのだとこの発表を聴いて知らされました。

 

長く続くサービスがモダンであり続けるためには(角田 拓己)

こちらは私が発表させていただいたものになります。初めての発表でありながら200名近くの方々に聴いていただきとても楽しかったです。
発表内容としては、長く続くサービスのモダンさを維持するためのメソッドを紹介していきました。
普段私が感じていることなど色々こちらのスライドに込めていますので、皆さんも何か感じるところがあればうれしいかぎりです!!

 

Javaの起動速度といかに戦うか(きしだ なおき)

 LINE Fukuokaのきしださんによる発表でした。最初の方にも少し述べていますが、Javaの起動速度をいかにして短縮させるかについての話でした。
新規で作成するようなアプリケーションや、マイクロサービスのような単機能のものでよければQuarkusやMicronautのようなフレームワークを利用することで解決できるかもしれませんが、
既存のアプリケーションに対して起動速度をあげようとした場合、このようなフレームワークの置き換えは気軽にできるものではないと思います。そのような場合、今回はなされた内容が適用できるかもしれません。
スライドにも記載されてますが、そもそもJDKを8から13に単純に置き換えるだけでも約100msほど早くなっているようです。これはJava12からDefault CDS(Class Data Sharing)でCDSが効いていることが要因らしいです。また他に起動速度を早くする手段として今回のCCCで私が聴いたセッションの半分以上で出てきたGraalVMによるNative Imageの作成です。Native Imageにすることで起動速度は大幅に短縮できるそうですが、スループットは逆に悪くなるそうなので、この辺はどのような環境で使うかによって考えた方が良さそうです。
きしださんの発表は過去のCCCや勉強会で聴かせていただいたこともあり、今回も僕のような初心者でもわかりやすく解説してくださってました。

Serverless時代のJavaについて(下川 賢介)

Amazon Web Servicesの下川さんによる発表でした。こちらもサーバレス環境におけるJavaの最適化についての話で、特にAWS Lambdaに着目したお話でした。
今までと同じようにAWS LambdaでもSpring Bootのjarを載せようとするとコールドスタート問題が発生してしまうとのこと。出来るだけフレームワークを利用せず、
プレーンJavaでLambdaの関数を定義するのがベストらしいです。とはいえ、フレームワークの恩恵を受けて実装したいときは、最初から全部入りのフレームワークを利用するのではなく、
最小構成に単機能のライブラリを追加していくことで多少コールドスタート問題は解決するらしいです。とはいえやはりSpring Bootに慣れてるためSpring Bootを使いたいという時に
aws-serverless-java-containerというものが用意されているそうです。このようにサーバレス時代になり、今まで考えてこなかった部分(Javaの起動速度など)も考えていかないといけなくなったため、このようなベストプラクティス的な発表はとてもありがたかったです。

 

JVMs in Containers: Best Practices(David Delabassee)

OracleのDavid Delabasseeさんによる発表でした。こちらはコンテナ環境におけるJVMのベストプラクティスのお話でした。
様々な視点からベストプラクティスを話されていました。
例えば、コンテナイメージのサイズを下げるためにJDKをそのまま利用するのではなく、JDK9から入っているjlinkを使ってカスタムランタイムイメージを作成することでサイズを小さくできるそうです。アプリケーションの起動速度に関しては他の方の発表でもありましたが、JDK13を利用するだけでdefaultでCDS(Class Data Sharing)が利用されているため、JDK8に比べて早くなります。このようにコンテナの最適化するにはDockerイメージを出来るだけ小さくすることと、アプリケーション自体の起動速度を早くすることが求められるとのこと。
またDavidさん曰くJDK8はコンテナに最適化されていないため、新しいものを使うことをオススメするとのことでした。
私自身コンテナ周りの知識があまりなかったですが、これから勉強しようとしていたのでとても勉強になりました。

 

懇親会の様子

iOS の画像 (4)

CCCの懇親会といえば毎回恒例となっているLINE寿司です!!
とても美味しかったです!!いつもありがとうございます!!!
今回は登壇したこともあり、ありがたいことにたくさんの方々とお話しさせていただきました。

 

まとめ

最初にも述べていますが、今回はサーバレス時代におけるJavaについて語られていたセッションがとても多いイメージでした。
そのほかにもたくさん面白いセッションがありましたので、こちらからご覧になってみてください!!


2019年10月21日

kakuda.takumi

Vue.js London 2019 参加報告会(非公式)を開催しました!

こんにちは。ピクトリンク事業部の角田です。
前回に引き続き、フリュー主催の勉強会を開催しましたのでご報告します。
前回のレポートはこちらから

京都Devかふぇ#7 〜Vue.js London 2019 参加報告会(非公式)【v-kansai共催】〜

今回は合計で約40名の方々にご参加頂きました!

今回は京都Devかふぇだけの開催ではなく関西でのVue.jsのコミュニティであるv-kansai様との共同開催となりました。
また、今回の勉強会のテーマとして、10/4(金)にロンドンのO2アリーナで開催されたVue.js London 2019の参加報告会と題しまして勉強会を開催いたしました。
ちなみにこちらが実際に行ってきた写真になります。

IMG_6494

セッション内容としては、やはり今話題のVue 3.0の話が多めで、実際にこちらのカンファレンス参加者と会話をしていてもVue 3.0の話が楽しみで参加したという方々がたくさんいました。

勉強会の様子

今回の勉強会では登壇枠で3名、LT枠で2名の方にご発表いただきました。
トップバッターは勉強会のテーマであるVue.js London 2019に参加した私、@chan_kakuzが「関西最速?Vue.js London 2019まとめ」という題で発表しました。
今回カンファレンスで話された内容から私がいくつかピックアップしてお話しさせていただきました。
2019-10-09-19-15-41

 

2番手は@Daikids2様による「Deep Dive Into Vue Composition API」です。
こちらはVue 3.0で採用されるであろうComposition APIについて実際にTodoアプリを作ってそのアプリを元にわかりやすく解説していただきました。
実際Vue.js London 2019でも9セッション中3セッションがComposition APIであるくらいVue 3.0の目玉と言えるものだと思います。

自分自身、この辺りの話はわかっていたつもりになっていた部分もあり、とても勉強になりました。
2019-10-09-19-49-49

3番手はサイボウズ株式会社の@shisama_様による「Vue.js Performance Tips」です。
@shisama_様が話された内容の中には今回のカンファレンスで話されていた内容もあり、とてもホットな話題であると感じました。
今回はフロント全般のパフォーマンスについての話もありましたが、特にVue.jsに絞って話されていました。
フロントエンドにおいてもパフォーマンスを考えることは大切であり、アプリケーションのレスポンスが遅いことでビジネスやUXなど様々な面で損失が大きいと私自身も感じています。

2019-10-09-20-04-02

続いてはLT枠です!!
LT枠では@cs_sonar様と@is_ryo様による発表がありました。
@cs_sonar様は今回のVue.jsの勉強会のために東京でVue.jsの勉強会に参加されたそうです。
ただ、初心者には厳しく、一番苦労するであろう環境構築は自分で行うという方針であったそうです。
今まではあまりフロント周りの部分は触ってこなくてもやはりVueはとっつき易い印象だったらしく、Vue.jsが大好きな自分としてはVueが好きな人が増えるのは嬉しいと感じました!

@is_ryo様はVue.jsのUIフレームワークであるVuetifyの紹介をされていました。
実際に私も個人ブログでVuetifyを利用していますが、とても便利であり、@is_ryo様のLTの発表内でも紹介があったモーダルは生のCSSで書こうとするとなかなかに苦労するところが簡単にかけたりします。モーダル以外にも便利なコンポーネントが用意されていたりと、Vue.jsを使ってるには人気のUIフレームワークであると思います。
2019-10-09-20-23-32
2019-10-09-20-30-27

懇親会の様子

IMG_20191009_204231

IMG_20191009_202151

たくさんの方が懇親会まで残っていただき、Vue.jsについて語り合うことができとても盛り上がりを感じました!!

まとめ

今回はVue.jsという日本でもとても人気のあるフレームワークをテーマに勉強会を開催させていただきました。
その結果たくさんの方にご参加いただき、様々な意見交換ができたと思っております。
今後もみなさんがワクワクするような内容をテーマに勉強会を開催していきたいと思っております!!


2019年10月2日

iida

フロント初心者がVue.jsを勉強する part.2

こんにちは、飯田です。
世間はいろんなゲームで盛り上がっていますね。普段FF14ばかりの私も久々にゲームを買いました。
今回も前回に引き続きVue.jsの勉強記事となります。
 

はじめに

この記事はフロント初心者がVue.jsを勉強する Part.1の続きです。
今回は実際のプロジェクト上のコンテンツをVue.jsにした話を書いていきます。
 

実際のプロジェクトでVue.jsを書いてみた。けれど…

まずは現状ピクトリンク内でVue.jsに置き換えられる静的ページやコンテンツを探すところからはじまりました。
 
そのひとつが、年に4回発行されるGIRLS TRENDという冊子の紹介ページです。
(余談ですがこちらの冊子は内容もデザインもとても可愛いので、ゲームセンターなどで見かけたらぜひ手にとってほしいです!)
 
GIRLS TRENDのディレクトリ構造は厳密には違いますが、だいたいこのようになっています。
色々突っ込みたいのですが現状それぞれのvolumeでディレクトリが切られていて、その中にファイルが2つセットでたくさんある感じになっています…

(vmというのはピクトリンクで使われているVelocityというJavaテンプレートエンジンのファイル拡張子です。ちょっとカオスなHTMLファイルのような感じですが、特にここで説明する必要はないので割愛します。)
 
毎号同じレイアウトで色や画像・内容が変更されるだけなので、内容のみ異なる同じようなvmファイルがたくさん存在しています。
まずは深く考えずに最新号のindex.vmをVue.jsに置き換えてPull Requestを出しつつも、せっかくVue.jsを使うのに似たようなファイルをどうにかまとめられないのか? と疑問に思っていました。
 
結果的に『Vue Routerを使ってみると良いかも』とレビューをもらい、Vue Routerに触れてみることにしました。
 

Vue Routerとは

シングルページアプリケーション(SPA)を構築するために用意されているVue.jsの公式拡張ライブラリです。
ルーティング制御に優れています。
 
公式ドキュメント
https://router.vuejs.org/ja/
 

シングルページアプリケーション(SPA)って?

単一のページで構成されているWebアプリケーションのことです。
ブラウザによるページ遷移を行うことなく、単一のページの中でコンテンツを切り替えて表示します。
こちらの記事が簡単にまとまっていて概要を掴むにはわかりやすいです。
https://qiita.com/takanorip/items/82f0c70ebc81e9246c7a
 

やってみる

さて、今回やりたいことは以下になります。
 
・URLをシンプルにし、volumeに対応した内容を表示させたい
→ magazine/21/ならvol.21のindexの内容を、magazine/22/ならvol.22のindexの内容を表示したい
・毎回レイアウトは同じなので1つのコンポーネントを使いまわして内容だけ変えたい
 
前回vue-cliで作成したプロジェクトにVue Routerをインストールしてローカルで試してみることにします。
 

インストール

※npm5.0より前のバージョンを使っている方は–saveオプションをつけてください。
 

ルーティング用コンポーネントの作成

ルートにアクセスしたときのVueコンポーネントをIndex.vue、magazineにアクセスしたときのVueコンポーネントをMagazine.vueとし、それぞれ作成します。
とりあえず簡単な文章を入れているだけです。

 

main.jsに設定の追記

Vue Routerはインストールしただけでは当然使えないので、main.jsに設定を追記します。

ルーティングの設定について簡単に解説します。

mode

デフォルトでは、設定したパスにアクセスするとURLに#(ハッシュ)が含まれてしまいます。
historyと設定することによって、URLから#を除くことができます。
ただ実際のプロジェクトでhistoryモードを使うにはサーバー側の設定が必要です。
詳しくはこちらを参照してください(私はサーバー側の知見がないのでこのへんもゆくゆくは知りたいですね! )

path

パスの設定です。
:からはじまるものはパラメータで、可変URLをマッチングするために使います。
今回は:volume部分に号数の数字が入る想定でパラメータにしています。

name

ルートに名前をつけます。
ナビゲーションの作成などに使うことができます。

component

path部分にアクセスしたときに表示するコンポーネントを設定します。
この場合だと/(ルート)にアクセスしたときはIndex.vue、magazine/:volume/にアクセスしたときはMagazine.vueが表示されます。
 

ルートコンポーネントに表示部分の追記

ルートコンポーネント(この場合なら全ての親コンポーネントにあたるApp.vue)に、表示部分を追記します。
(App.vueにはもともとvue-cliでプロジェクトを作成した際にすでに色々書いてありましたが、今回はわかりやすいように余計な記述を消しています。)

<router-view />と記述することによって、パスと一致したコンポーネントがこの部分に表示されるようになります!
最初のうちは書き忘れてなんか表示されないんだけど…?とやっていたりするので書き忘れないようにしましょう。(実体験)
 

実際にアクセスしてみる

上記が終わったら、前回と同じように

でローカルサーバーを立ち上げてhttp://localhost:8080/にアクセスします。

FireShot Capture 018 - my-project - localhost

このような表示になったら成功です! ちゃんとルートにアクセスした際にIndex.vueが表示されました。
 
次はhttp://localhost:8080/magazine/21にアクセスします。
21部分は上記で説明したとおり可変パラメータにしているので、別の数字でも同じ表示になります。
 

FireShot Capture 019 - my-project - localhost

Magazine.vueが表示されました!
これでVue Routerを使うことによって、ルーティングが機能してコンポーネントの表示が切り替わることを確認できました。
 

まとめ

今回はどういう経緯でVue Routerに触れることになったかの話とVue Router導入編でした。
Part.3では実際にvolumeに対応した内容を表示することをやりたいと思います。


2019年08月29日

iida

フロント初心者がVue.jsを勉強する part.1

はじめに

はじめまして、飯田です。
フリューにはフロントチーム設立と同時に2018年6月に入社しました。
主にピクトリンクのフロント面を触っていて、現在はVue.jsを勉強しています。
Vue.jsは「わかりやすい」「フロント初学者に最適」などと言われてはいますが、今までアニメーションをつけるためにふんわりjQueryを書いていた程度の私には敷居が高く、難しく感じました。
そんな自分がどのような流れでVue.jsというものを学んでいるのかを少しずつ書いていこうと思います。

 

最初にやったこと

公式ドキュメントに目を通す

https://jp.vuejs.org/v2/guide/index.html
Vueは公式ドキュメントが日本語化されているのでありがたいなあ、ととりあえず読んでみる…も、自分の知識が足りず、説明に当たり前のように出てくるカタカナの開発用語やプログラミング用語が分からず、コードを見てなにができるのかなんとなく分かっても文章自体はあまり理解できませんでした。
ベースの知識があまりない状態で新しい技術を習得しようとするときのあるあるなのかもしれません。
正直挫折しそうになってしまったので書籍に頼ることにしました。

書籍を読む

基礎から学ぶ Vue.js
通称「猫本」
公式ドキュメントの内容をもっとわかりやすく書いてくれている本です。
7章以降は飛ばしました。
  
動かして学ぶ!Vue.js開発入門
こちらはVue.jsの基礎中の基礎がかなり噛み砕いて説明されておりわかりやすかったです。
説明にも特に難しい用語が使われていないので最後までスラスラ読めました。
個人的に最初から難しい説明を読むのが嫌ならこの本から入ると良いと思います。
  
Vue.js入門 基礎から実践アプリケーション開発まで
全体を読むというよりは、わからない部分や知りたい部分のみ都度目を通しています。
  
コンポーネントやVue Router、Vuexについての説明は最初は読まずに飛ばしました。
また、学習過程でわからないことが出てきた際に公式ドキュメントや上述の本の必要な部分を都度読み返しています。
 

とりあえず簡単なものを書いてみる

まずは公式ドキュメントや本を見ながら、基礎的なものを手を動かして書いていました。
私はWebページでVue.jsをどのように使えば良いのかうまくイメージができなかったので、自分が今まで書いたjQueryをVue.jsで置き換えるとどうなるかを試したりもしていました。
 

  • dataを作ってそのまま表示してみる
  • v-modelを使ってフォームに入力した内容を表示してみる
  • v-ifを使って要素の出しわけをする
  • v-onを使ってボタンをクリックしたときにイベントを発火させてみる
  • v-forを使ってリストの内容を繰り返してみる

 
そして上記がなんとなく理解できたら、実際の業務で使えそうなものを書いて動かしていました。
 

  • 文字数をカウントするフォーム(v-model)
  • 押したボタンによって内容を切り替える(v-on + v-if)
  • Todoリスト(色々なものの組み合わせ。書籍やあらゆる記事で解説されているので基礎の応用かなと思っている)

 
などなど
 

Vue Componentについて

プロジェクト上で練習用ブランチを切って過去に作ったキャンペーンページを練習でVue.jsに直していたのですが、Pull Requestで「コンポーネントに分けた方がいいよ」とレビューをいただきました。
すっ飛ばしていた公式ドキュメントや書籍のVue Componentについての説明をやっとここで読みました。
ボタンなどの何度も使うような部品をコンポーネントとして定義し、都度呼び出すことによって簡単に使い回せるようにするイメージです。
 
公式ドキュメント
https://jp.vuejs.org/v2/guide/components.html
 

表示

FireShot Capture 015 - my-project - localhost
作成したHogeComponent<hoge-component></hoge-component>部分で表示させています。
コンポーネント名をケバブケースで記述することによって呼び出すことが可能です。

慣れないうちは割とやりがちな注意点

ちゃんと表示されないんだけど!?というときに確認すること。

  • Vue Componentを使う際はdataをfunctionにする / returnを記述する
  • スペルミスをしていないか(プロパティ名、コンポーネント名、あらゆる場所でよくやりがち)
  • Vueインスタンス内のcomponents:の中にコンポーネントの設定を記述するのを忘れていないか

 

vue-cliを使ってみる

※あらかじめnode.jsとnpmのインストールが必要です。この記事では省略します。
ある程度の規模のプロジェクトでVue.jsの開発環境を一から構築するのは大変です。
Vue.jsのアプリケーション開発に必要な環境や設定を色々と整えてくれて、雛形ファイルも用意してくれるのがvue-cliというなんかすごいやつです。
 
試しにローカル環境で使ってみます。

インストール

プロジェクトの作成

my-project部分はプロジェクト名にあたるのでお好きな名前で。
色々聞かれますがとりあえずEnter連打で良いと思います。

ローカルサーバーの起動

作成したプロジェクトのディレクトリに移動し、ローカルサーバーを起動します。
FireShot Capture 017 - my-project - localhost
http://localhost:8080/ にアクセスし、上記の画面が出れば起動成功です。
  
初めて使うときはこちらの記事を参考にさせていただきました。
https://qiita.com/567000/items/dde495d6a8ad1c25fa43
 

ファイル構造について

vue-cliを使う際は、単にHTMLファイルにVue.jsを書いていたときとは違う点が多々あります。
先ほど作成したプロジェクトのディレクトリを開き、主要なファイルを見てみます。

どのVueファイルの内容をindex.htmlのどの要素内に表示させるかを設定しています。
上記では#appという要素にApp.vueの内容を表示させています。

Vueファイルにはtemplatescriptstyleがまとめて書かれています。
これを単一ファイルコンポーネントと呼びます。
 

単一ファイルコンポーネントのメリット

Vue Componentを独立した一ファイルにすることができます。
vue-cliで作成したプロジェクト内のVueファイルは既にこの形になっています。
 
公式ドキュメント(説明が難しい…)
https://jp.vuejs.org/v2/guide/single-file-components.html
 

単一ファイルコンポーネントの利点は、一ファイルにtemplatescriptstyleをまとめて記述することができる点です。
先ほどのsrc/App.vueをもう一度見てみます。

template、script、styleがまとめて書かれているのがわかると思います!

<template>タグ直下は必ずひとつのブロック要素で囲みます。(エラーになります)
ここでHelloWorldという名前のコンポーネントを表示しています。
msg=部分についてはApp.vueからHelloWorldコンポーネントに表示させたい文字列を渡しているのですが、次のセクションで説明します!

name:部分は省略可能ですが、書いた方が良いと思います。
他の単一ファイルコンポーネントを読み込むときは、<script>タグ内でファイルをimportします(変数名 + ファイルパス)
components:内に読み込んだコンポーネントの変数名を記述するのも忘れないようにします。

デフォルト言語はCSSですが、lang属性を使用することによって他の言語をサポートしてくれます(普段書き慣れているSCSSなどで書ける)
scopedを付けることによって、記述したスタイルをそのコンポーネントにのみ適用させることができます。
その場合は下記のように書くことができます。

 

コンポーネント同士のデータの受け渡し

先ほど触れた通り、App.vuetemplate部分で読み込んでいたコンポーネントHelloWorld部分にmsg=ではじまる謎の記述がありました。

ここで、HelloWorld.vueという単一ファイルコンポーネントを読み込んでいるApp.vue親コンポーネント、読まれているファイルであるHelloWorld.vue子コンポーネントと呼びます。
 
親コンポーネント側(App.vue)のこの部分で子コンポーネント側(HelloWorld.vue)のmsg部分にWelcome to Your Vue.js Appという文字列を渡しています。

ここで、コンポーネントとして読み込んでいるsrc/components/HelloWorld.vueを見てみます。

このとき、子コンポーネントに親コンポーネント側から受け取りたいデータについて記述する必要があります。
このときに使うのがpropsで、script内に以下のように書きます。

propsを記述することで親コンポーネントから文字列を受け取ることができました。
template内の{{ msg }}部分で受け取った文字列が表示されています。
  
ここまでを表示で確認すると以下のような構造になります。
FireShot-Capture-017---my-project---localhost
 

注意点

単一ファイルコンポーネントを作成するときの命名規則

パスカルケースかケバブケースに統一するべきとのことです。
https://bit.ly/2HsGJDO
  
ちなみにピクトリンクのフロントチームではファイル名をパスカルケースに統一しています(公式ガイドに合わせています)

 

同じ階層にあるファイルのパス指定には./必須

vue-cliでファイルをimportする際、同じ階層のファイルのパス指定に./を含めないとエラーになってしまいます。

 

長くなってしまいましたが、Part.1ではVue.jsを学ぶに当たって最初に何をしたか、Vue Component、vue-cli、単一ファイルコンポーネント、propsについて説明してみました。
Part.2では実際にプロジェクト上のコンテンツをVue.jsに直した話を書いていこうと思います。


2019年08月9日

Hashimoto Naoto

コマンド操作でESXiユーザを作成して権限を付与する

こんにちは。
信玄餅を食べると毎回せる系エンジニアの橋本です。
たかが信玄餅、そう思ってないですか? それやったら明日も私は噎せますよ。

さて本題。VMWareHostClientのGUIにログインせずにユーザ追加や権限設定を行いたい。

こうする

たとえば、keisukeというユーザを作ってAdmin権限を付与したい場合、以下のようにします。

初期から設定できる権限は以下の通り。

  • Admin: 管理者権限ロール。なんでもできます。
  • NoAccess: デフォルトのロール。とくに何ができるわけでもない。
  • ReadOnly: 閲覧権限ロール。ESXiホスト関連のオブジェクトを表示できるが、変更はできない。

自分で必要な権限ロールを新しく作ることもできます。

応用

コマンドライン上で完結できると何がシアワセかと言いますと、何台ものホストサーバに対して同じ操作をする手間を軽減できるのです。

たとえばesxi-test-server-01〜20までの20台のサーバに同じユーザを作り、公開鍵までまとめて配置したいときは以下のようにします。

公開鍵id_rsa.pub はあらかじめssh-keygenで作っておいてくださいね。
なお、このまま使うと全環境で同じパスワードが割り当てられていますから、ユーザ作成後に適宜変えてください。

Ansibleを用いて初期設定をコード化&自動化したい場合はvault でパスワードの暗号化を施すのがモアベターです。