ChatGPTにお願いして技術記事を書いてもらった
こんにちは!
スマレジ テックファームのMichiです!
最近、何かと話題になっていますよね、ChatGPT。
うちの職場でもChatGPTを使って遊んだり、実装で分からないところを質問したりと、 いろいろ活用しているのですが、そこでうちのマネージャーが
「これ、ChatGPTでブログ書けるんちゃうん?」
という、とんでもないことを言い出した(?)ので、今回は「ChatGPTに技術記事を書いてもらったらどうなるのか?」を検証したいと思います。
さっそくChatGPTにお願いしてみる
今回は、「Vuexの使い方をサンプルコードを示しながら説明してください」とChatGPTにお願いしてみました。近々、Vuexのまとめ記事を書きたいなと思っていたのですが、ChatGPTがやってくれるのなら俺いらんな...。
さっそく、ものすごい勢いで作ってくれました。
全文作成するのに、わずか1~2分。自分で書くとしたら調べる時間も含めて2~3時間はかかるので、本格的に自分オワコンフラグが立ちそうです。
Vuexについてまとめてみた(著:ChatGPT)
VuexはVue.jsの状態管理ライブラリであり、アプリケーションの状態を集中管理することができます。以下はVuexを使用して簡単なカウンターアプリケーションを実装する例です。
まず、Vue.jsおよびVuexをインストールします。
npm install vue npm install vuex
次に、Vue.jsアプリケーションを作成し、Vuexストアを作成します。
// main.js import Vue from 'vue' import Vuex from 'vuex' import App from './App.vue' Vue.use(Vuex) const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++ }, decrement(state) { state.count-- } }, actions: { increment(context) { context.commit('increment') }, decrement(context) { context.commit('decrement') } }, getters: { count: state => state.count } }) new Vue({ el: '#app', store, render: h => h(App) })
上記のコードでは、Vuex
をインポートしてVue.jsアプリケーションに使用するように設定しています。次に、Vuex.Store
を作成し、state
オブジェクト、mutations
オブジェクト、actions
オブジェクト、およびgetters
オブジェクトを含めます。これらはVuexストアの主要な要素であり、状態の管理、状態の変更、非同期処理、および状態の取得を担当します。
state
オブジェクトには、アプリケーションの状態を含むオブジェクトを定義します。上記の例では、単一のカウント変数を持つ状態オブジェクトを定義しています。
mutations
オブジェクトには、状態の変更を実行するミューテーション関数を定義します。上記の例では、increment
およびdecrement
関数を定義し、それぞれ状態オブジェクトのcount
変数を増減させています。
actions
オブジェクトには、非同期処理を実行するアクション関数を定義します。上記の例では、increment
およびdecrement
関数を定義し、それぞれミューテーション関数を呼び出して状態の変更を行っています。
getters
オブジェクトには、状態オブジェクトの値を取得するためのgetter関数を定義します。上記の例では、count
関数を定義し、状態オブジェクトのcount
変数を返しています。
最後に、Vue.jsアプリケーションを作成し、store
オブジェクトを渡していることに注意してください。これにより、すべてのコンポーネントでstore
オブジェクトを使用できるようになります。
次に、Vue.jsアプリケーション内のコンポーネントでVuexストアを使用する方法を示します。以下は、カウンターコンポーネントの例です。
// Counter.vue <template> <div> <p>Count: {{ count }}</p> <button @click="increment">+</button> <button @click="decrement">-</button> </div> </template> <script> export default { computed: { count() { return this.$store.getters.count } }, methods: { increment() { this.$store.dispatch('increment') }, decrement() { this.$store.dispatch('decrement') } } } </script>
上記のコードでは、カウンターコンポーネントで状態の取得とアクションの実行を行うために、computed
とmethods
オブジェクトを使用しています。computed
オブジェクトでは、count
関数を定義して、ストアのcount
ゲッターを呼び出しています。methods
オブジェクトでは、increment
およびdecrement
関数を定義して、ストアのincrement
およびdecrement
アクションを呼び出しています。
以上がVuexの基本的な使い方の例です。Vuexを使用することで、アプリケーション全体で状態の管理を行うことができ、コンポーネント間で状態を共有することができます。また、非同期処理を含む複雑な処理も、ストア内で一元管理することができます。
検証してみる
いや~、すごいですね。日本語も自然だし、サンプルコードも分かりやすい。
解説を読む限り、特に間違っているところはなさそうです。一応、サンプルコードが動くかの検証もしておきましょう。
って、あれ..?環境を作ってコードをコピペしましたが、動きません。
調べてみると、ChatGPT君が言っているのは古い書き方なので、最新のVue.js3準拠の書き方に直してあげます。
// main.js 修正 import { createApp } from "vue" import { createStore } from "vuex" import App from "./App.vue" const store = new createStore({ state: { count: 0, }, mutations: { increment(state) { state.count++ }, decrement(state) { state.count-- }, }, actions: { increment(context) { context.commit("increment") }, decrement(context) { context.commit("decrement") }, }, getters: { count: (state) => state.count, }, }); createApp(App).use(store).mount("#app")
これで動くようになりました。
感想
素晴らしい技術記事を書いてくれたChatGPTですが、バージョンの違いにはまだ弱いみたいです。特に、Vueはまだまだ3系より2系の情報がネットに多いせいか、古い情報が紛れ込むことがあります。
まあ、これについてはChatGPTに命令するときにちゃんとバージョン指定してやれば解決します。試しに、「Vue.js3の書き方で」とChatGPTにリクエストしてみたら、さっきのコードの不備を改善したうえで、CompositonAPIを使って書いてくれました。
ていうかこれ、もう実はChatGPTで作った記事を自分で書いたことにして、Qiitaに上げてる人とかいそう…。
さすがにそれは自分の勉強にならないのでやりませんが、ChatGPTにサンプルコードだけ作ってもらうとかはありだと思います。
分かりやすいサンプルコードを作るのって、本当に難しいし時間かかるんですよね。
ChatGPTが出た当初は、「なんてもの公開してくれたんや。こんなもん、プログラマーの仕事なくなるやないか!(特にジュニア層)」と思ったものですが、世に出たからには、うまく活用して自分の業務や学習に役立てていきたいですね。