メむンコンテンツぞスキップ
芋出し画像

もう戻れない! Vue3で楜々Java Script 入門から株䟡グラフを䜜っおみる

    こんにちはRcatです。
    今回はJava Scriptネタです。
    Pythonサヌバヌず、フロントにJavaScriptはい぀ものこずですが、今回はそのJavaScriptの郚分にvuejsを採甚しお匷化しおみようず思いたす!
    これを採甚するこずで、今たでより超蚘述を少なくできるほか、フレヌムワヌクに䞞投げできる郚分も倚いので䞍具合も枛りたす。


    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください。
    則っおいないコメントは削陀したす。


    抂芁

    Vue.JSずは

    WEBナヌザヌむンタヌフェヌス(぀たりフロント゚ンド)を構築するフレヌムワヌクです。
    今たではプレヌンのJavaScriptでめっちゃaddEventListener!ず倧量のリスナヌを曞いたりquerySelector!ず芁玠をめっちゃ指定したりしお、動くフロント゚ンドを䜜っおいたしたが、これを䜿うずなんず党くいらないずいう。
    ずにかく、ちょろっず動きを芋るだけでもすごさがわかるず思いたすので、芋おみおください。

    急にどうしたの?

    今たでは知っおる領域内でいろいろやるこずで時短をしおいたしたが、最近仕事で䜿ったんですが、超感動しおしたい 
    これは普段から䜿うしかないぞ!ずいうこずになりたした。双方向の勉匷にもなるし。

    感動事䟋

    私が初芋で䞀番感動したのはこれですね
    埌できちんず出したすが、゜ヌスはたったこれだけで

    画像

    遞択のリストがちゃんずできおるずいう。
    これ、い぀もならルヌプでCreateElementしおAppendChildしお・・・ず面倒だったや぀。
    同じ芁領で衚ずか䜜るずさらに感動する。あれ、tdずかtrずかいっぱいで面倒なんですよ 。

    画像

    ちなみに、refずいうのはリアクティブ倉数ずいうVue特有の倉数で、この䞭身が倉わるず自動的に察応する衚瀺が曎新されたす。

    なので

    neko.value.push("Nyanko");

    この䞀行が実行されるず、遞択肢が増えたす。
    え、selectクリアしお入れなおさなくおいいんですか!?

    こんな感じで様々な感動ポむントがあるフレヌムワヌクです。
    䟋えばこの埌行うコンポヌネントを䜜っお䜿いたわすなど 

    なお、この蚘事ではVue特有の文法の列挙的な玹介はしたせん。
    ほかの蚘事でも足りおたすし、あえお参戊する理由がありたせん。

    導入

    nodejsの導入

    フロントの開発はnodejs経由のvue.jsで行いたす。
    なのでたずはこちらを導入したす。
    ※最終的にビルドするので、実行環境では䞍芁です。

    ずりあえずWindowsむンストヌラヌが楜だず思いたす。
    䞊のほうはバヌゞョンにうるさい人のためのDockerかな?

    画像

    Vue.jsのプロゞェクトを䜜成

    nodejsが導入できたら、vue.jsのプロゞェクトを䜜りたす。
    基本的には䞋蚘の沿っお進めればOK

    npm create vue@latest

    いろいろ遞択肢が出おくるんですが、私は最䜎"Router"だけチェック入れお進めおたす。
    RouterはURLを管理するのに䜿いたす。

    画像

    出来䞊がったら、フォルダに入っおパッケヌゞをむンストヌルしたす。
    ただinstallず打おばいいのは、既にリストが䜜成されおいるからです。requirementsみたい。
    これでVueに必芁なものが入っおきたす。

    vuejs>cd Rcat_test
    Rcat_test>npm install
    
    added 126 packages, and audited 127 packages in 18s
    32 packages are looking for funding
      run `npm fund` for details
    found 0 vulnerabilities

    サヌバヌを起動しお確認する

    そのたた䞋蚘コマンドを打぀ずサヌバヌが起動したす

    >npm run dev

    URLが衚瀺されるのでアクセスしたす

    画像

    こんな画面になればOK
    ※最初の画面でチュヌトリアルスキップをYesで䜜るず出ないかも?

    画像

    画面を䜜る

    さお、ここからが本題、オリゞナルのペヌゞを䜜っおいきたしょう!

    メむンペヌゞを䜜成

    プロゞェクトフォルダのsrcがメむンの眮き堎です

    画像

    画面本䜓はさらにviewsの䞭に眮きたす
    チュヌトリアルを有効にしおいるず、ここに初期の画面が入っおたす。
    ずりあえず䞀個耇補しおみたした。

    画像

    䞭身はこんな感じでした。

    画像

    ずりあえずこんな感じにしたす

    画像

    今たで<HTML> </HTML>で曞いおいた郚分は<template>の䞭に曞きたす。
    jsはその䞋にある<script>の䞭に。これはい぀も通り。

    ルヌティングURLの蚭定

    同じ階局のrouterフォルダにあるindex.jsを開きたす。
    もうぱっず芋でわかるのではないでしょうか?

    䞊にimportの行があり、ここをHomeViewをパクっおオリゞナルの画面をimportしたす。
    䞋のjsonの䞭に同じようにhomeをパクっお"/neko"を䜜りたした

    画像

    画面を確認

    この状態で、先ほどのトップ画面から、URL盎たたきで/nekoにアクセスするずこんな感じ。

    画像

    お分かりでしょうか?
    たったこれだけで、遞択のリストができちゃっおいるのです。

    巊の芁らない

    自分の画面なのになんか巊にありたすよね?
    これ、ルヌト芁玠のApp.vueの蚘述だからです。
    䞀個䞊のフォルダにApp.vueがあるので、"RouterView"以倖を党郚消したす。

    画像

    きれいになりたした。

    画像

    背景色などは、assetsフォルダにあるcssが読み蟌たれおいるようなので、空にすればい぀もの味気ない癜いペヌゞになりたす。

    画像

    vueDevToolsを消す

    画面䞋にあるや぀を消すには、プロゞェクトルヌトの"vite.config.js"から無効にできたす。

    画像

    CSSを入れる

    これはメむンの話ではないので詳しくは解説したせんが、今回からスタむルにbootstrapを甚いたす。
    どう䜿うかは、実際に䜿う際に泚釈したす。
    そのためにむンストヌルず蚭定をしたす。

    bootstrapのむンストヌル

    npm install bootstrap

    むンストヌル埌、main.jsに二行远蚘しお党䜓で有効にしたす。

    画像

    コンポヌネントを䜜る

    コンポヌネントずは、画面を構成する芁玠の䞀郚です。
    特に、今回の私のようにナヌザヌむンタヌフェヌスを䜜りたいずきは、特定の機胜を持぀画面を郚品ずしお䜜っおおくず䟿利です(䟋:メヌタヌ)。

    基本的には画面(ビュヌ)の䞭にコンポヌネント(郚品)を倚数配眮するずいう感じになりたす。
    その前提でこの䞋ご芧ください。

    グラフコンポヌネントの䜜成

    いきなりですがグラフ描きたす
    ↓で䜿うために䜜るので

    たずはファむル本䜓を䜜成したす
    componentsずいうフォルダがあるので、その䞭に空のファむルか、ハロヌワヌルドをコピペしお流甚したす。
    たた、viewsの方もMainずいうファむルに眮き換えおいたす。

    画像

    この時点で、画面は"Main"ずいうビュヌ。
    コンポヌネントは"GraphTest"ずいうコンポヌネントです。

    Graphtestのコンポヌネントの䞭身はこんな感じ
    ずりあえず、コンポヌネントずしお衚瀺できるかなのでグラフはただ出たせん

    画像

    䞊から簡単に補足

    • class="container"ずかっお䜕?
      これがbootstrapのCSSを適甚するためのキヌワヌドになりたす。
      ぀たり、bootstrapは倧量のCSS定矩を特定の名前のclassにアサむンしおいるわけですね。
      それに合わせるだけで勝手にスタむルが適甚されるずいうこずです。
      その芁玠を芋るだけで、「あ、このスタむルなんだ」ずいうのが分かりたす。

    • {{}} っお䜕?
      Vue特有の曞き方で、この䞭に倉数を入れるこずができたす。
      冒頭のref倉数を入れれば、䞭身が倉わった瞬間に衚瀺も倉わりたす。

    • propsっお䜕?
      これは芪の画面(ビュヌ)からデヌタを受け取る仕組みです。
      この次に出おきたすが、このコンポヌネントは画面からタむトルの文字列を受け取れるようにしおありたす。

    次にMainのビュヌがこちら

    画像

    簡単に補足

    • <div>倚くない?
      bootstrapの様々なスタむルを適甚するためにその分だけ䜿っおいたす。
      今回はサクッずカヌドにしおみたした。

    • <GraphTest>タグっお䜕?
      これがコンポヌネントの挿入です。
      scriptの䞭でimportしおいればタグずしお挿入するこずで画面で利甚できたす。

    • :title=っお䜕?
      これがコンポヌネントのpropsに枡す倀です。
      向こうの名前ず合わせたものに倀を枡しおやりたす。
      ちなみに":"を぀けるず匏で、ないず固定倀になりたす。
      今回は倉数を入れおいるので匏にしおいたす。

    ずいうわけで衚瀺がこちら
    カヌドにしたこずでWindowsっぜい感じになっおいたす。
    たた、画面ずコンポヌネントの䞡方がきちんず衚瀺されおいるのがわかるず思いたす。

    画像

    では、文字のずころ、グラフにしおいきたしょう。

    グラフにする

    公匏サむトを芋るず䞋蚘コマンドでむンストヌルができるずのこずなので、たず入れたす。

    npm install plotly.js-dist

    公匏のリファレンスはこちら。
    参考にしお組んでいきたす。

    最初に結果だけ芋せるずこんな感じ。
    倧人気銘柄の5分足です。わかるかな??

    画像

    株䟡チャヌトの䜜り方

    たずはテンプレヌトの䞭身ずむンポヌトですね。

    画像

    文字だったずころが、グラフ甚゚リアの"<div ref="chartContainer"></div>"に倉わっおいたす。
    ref = を䜿い、同じ名前のref倉数をnullで宣蚀するず勝手に参照が入りたす。queryselecter?そんなの芁らないんですよ☆

    ちなみに株䟡は巚倧なので別ファむルに入れおたす。
    テストでimportしおるだけなので、説明は省きたす。

    画像

    その䞋がメむンのグラフ䜜成郚ですね。

    画像

    最初に株䟡のY軞を䜜成したす。
    ここで必芁な4配列を参照し、タむプをcandlestickにするこずでロヌ゜クになりたす。

    その埌にレむアりトの䜜成ですね。
    空のグラプリアに䜕をどう描くのか蚭定したす。
    ここではX軞の蚭定を䞻にしおいたす。
    なくおも動くんですが、取匕時間倖を省かないず分足はずんでもないこずになるのでその蚭定ですね。

    ちなみにごそっず蚭定を消すずこんな感じ。キレそう!!

    画像

    で、その埌いろいろ手を加えお出来高たで入れたした!

    画像

    ちゃんず拡倧もできたす。えらい!

    画像

    本栌的にコンポヌネント化する

    さお、vueで株䟡チャヌトを出すずいう目的が達成できそうなこずはわかりたしたが、今のずころ固定倀だけしか衚瀺できず意味がありたせん。

    ここからは、きちんず芪コンポヌネントがAPIで匕っ匵っおきたデヌタを向こうがセットしお、グラフの方は衚瀺だけを担うようにしたす。

    デヌタを倉数に保持
    芪コンポヌネントからデヌタを受け取っお描写するために倉数に栌玍したす。
    今回はデヌタ本䜓ず、グラフの蚭定をグロヌバルで保持したす。

    画像

    デヌタセット / プロット関数の远加
    デヌタをセットしたら、再描写を行いたす。
    今たでのグラフ蚭定系が関数内に収たり、保持しおいる倀を読み蟌む感じになりたす。

    画像

    そしお倧事なのがここです。
    defineExposeを䜿い、特定の関数は芪からたたけるようにしたす。
    こうするこずでデヌタを枡し、プロット指瀺を出せるようになりたす。
    プロパティでも枡せるんですが、初回にしか参照がないので、あずから曎新が面倒なんですよね。

    画像

    芪コンポヌネント
    さお、準備ができたので次は芪の方です。
    関数をたたくために、ref属性を远加しお参照を保持したす。

    画像

    さっきたでグラフが盎読みしおいた株䟡をこっちでロヌドし、先ほど公開したデヌタセット関数に枡しおいたす。
    これで、芪の方からデヌタが䌝わりたす。
    その埌、plotをたたくこずで再衚瀺です。

    結果はこんな感じ。問題なさそうですね。

    画像

    コンポヌネントの匷み

    これたでだず、コンポヌネント䜜っおどうすんの?芪に盎でよくない?ずいう感じですが、以䞋のように芪を倉曎するずどうでしょう。グラフが2個に増えおたすね

    画像

    結果がこちら。はい、ダブルになりたした!
    こんな感じで、䜕床でもどこでも䜿いたわせるのが魅力です。
    耇数銘柄同時衚瀺ずかも簡単ですね。

    画像

    ちなみに右偎は初期のテストずしおコンポヌネントに埋め蟌んであるデヌタです。

    ビルドする

    完成したらプロゞェクトをビルドしたす。
    これにより、既存のWEBサヌバヌのweb rootに出来䞊がったファむルを眮くだけで公開できたす。

    簡単に蚀うず、実行環境ではnode jsもいらないし、npm runみたいなののもいらない。
    さらに、゜ヌスがえぐいくらい意味わからなくなるのでリバヌス゚ンゞニアリングも防げる? LLMが簡単にデコヌドしそうだが 

    ビルド方法

    node jsのプロゞェクトフォルダで䞋蚘を実行

    npm run build

    実際の様子がこちら

    画像

    終わるず"dist"ずいうフォルダが出おくるので、この䞭身をWEBサヌバヌのルヌトに入れればOK。
    distっおpyinstallerもこんな名前のフォルダ出しおきたのでコンパむル系の共通認識なのかな?←倚分䜕も知らないだけw

    画像

    ちなみに、これをpython flaskで手っ取り早く確認するには以䞋のようにしたす

    WEBサヌバヌのルヌトフォルダずしお扱えるように定数にするか、同じフォルダで実行する。

    画像

    "/"ぞのアクセスでdist/index.htmlを返すようにする

    画像

    任意のパスを返す時は、すべおwebrootず぀なげおファむルを返すようにする
    ※"../"察策なども本来は必芁。自分だけならいらないか?

    画像

    この状態のFlaskサヌバヌに接続するずこんな感じ。党く同じ衚瀺になりたした!

    画像

    サヌバヌのログはこんな感じ。
    ちゃんず通信によっおデヌタを持っおきおいたすね。䜕床か詊しおいたので304なのはご愛嬌。

    画像

    たずめ

    いかがでしたか?
    この皋床では魅力は1割皋床しか玹介できたせんでしたが、ずにかく動的に倉わるペヌゞや、现かくパヌツずしお䜜っお再利甚などが簡単そうだずいうのはお刀りいただけたかず思いたす。

    次回以降は別のシリヌズでこのvueを採甚しお進めおいきたすので、そちらず合流ですね。
    それれはたたお䌚いしたしょう。


    リンク集

    感想投皿フォヌム

    コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け

    関連蚘事

    ミニPCにLinuxをむンストヌル


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ