-
Reactコンポーネントが「純粋である」とはどういうことか? 丁寧な解説
zenn
@uhyo
2025/05/07
207
Reactコンポーネントの純粋性とは
Reactコンポーネントは、与えられた入力(propsとフックの返り値)に対して常に同じ出力を返す必要があり、これを純粋性と呼びます。違反すると予期せぬ動作や最適化の妨げになります。
副作用の例とReactコンポーネント
Reactコンポーネント内での変数書き換え、外部からの読み取り、同じ入力に対する異なる結果、ログ出力、ネットワークリクエストなどは副作用の例であり、純粋なコンポーネントでは避けるべきです。
JSX式とReactランタイム
JSX式はReactランタイムへの指示書であり、同じ入力に対して同じ指示を出すコンポーネントは純粋であると考えられます。JSX式の同一性はASTとして同じかどうかで判断できます。
イベントハンドラと副作用
イベントハンドラはコンポーネントの返り値の計算に含まれないため、副作用を含んでいても問題ありません。重要なのは、コンポーネントが出す指示(返り値)が同じ入力に対して常に同じ意味を持つことです。
フックと純粋性
Reactのフックはコンポーネントに対する入力の一部として扱うべきです。propsだけでなく、useStateなどのフックの返り値も入力として考慮することで、フックを使ったコンポーネントの純粋性を理解できます。
※これはGeminiによる生成物です
-
AI エージェントを仕組みから理解する
zenn
@ogino
2025/05/07
112
LLMの限界とAIエージェントの実装
LLMはテキストの入出力しかできないため、AIエージェントは外部ツール(ファイル操作、Webアクセスなど)を呼び出す仕組みを実装することで、自律的な動作を実現している。
LLMは記憶を持たない
LLMは過去の会話を記憶しないため、AIエージェントは過去の会話履歴をコンテキストとして毎回LLMに送信することで、会話の文脈を維持している。
Tool Use (Function Calling)
LLMに実行したいコマンド(関数やAPIの引数)を出力させ、それを実行する仕組みをTool Useと呼ぶ。これにより、LLMは外部環境とインタラクション可能になる。
MCP (Multi-Chain Protocol) の役割
MCPは、AIエージェントのツール定義と実行を外部プロセスに移譲するための通信プロトコルであり、JSON SchemaとJSON-RPCを利用して拡張性と再利用性を高める。
Prompt Cachingによるコスト削減
AIエージェントは複数回のTool Useでコストが累積しやすい。Prompt Cachingによって、過去の会話履歴を再送するコストを削減し、エージェントの効率を高めることが可能。
※これはGeminiによる生成物です
-
個人開発で月20万円を目指すための考え方
qiita
@sakes9
2025/05/06
480
初期段階:モチベーション維持の重要性
個人開発は自由度が高い分、モチベーション維持が不可欠。自身の開発が楽しくなるポイントや、目指すべき目標を明確にすることで、継続的な開発を促す。
市場調査:レッドオーシャンでもチャンスあり
アプリ市場は競争が激しいが、既存の人気アプリを参考に良い点を取り入れ、独自の価値を付加することで差別化を図れる。ライバルが多いことはニーズがある証拠。
要件定義:アプリに個性を
アプリには他と差別化できる個性が必要。独自の機能やUI/UXの工夫で、ユーザーに「これだから使いたい」と思わせることが重要。筋トレアプリにおけるティアリスト形式での管理が例。
開発:スピード重視でまずリリース
収益化や早期リリースを目指すなら、完璧な設計よりまず動くものを作ることが優先。不要な機能を削ぎ落とし、リリース後のユーザーフィードバックを基に改善を行う。
収益化:サブスクモデルと無料体験
継続的な収益にはサブスクリプションが有効。無料体験期間を設け、ユーザーに価値を実感してもらうことで、課金へのハードルを下げる。安心感を明示することも重要。
※これはGeminiによる生成物です
-
AIを普段ガンガン利用する僕がAIを利用したプログラミング学習方法を考案してみた
qiita
@kumai_yu
2025/05/06
205
AIを活用したプログラミング学習の全体像
AIツール(Cursor, Windsurfなど)を活用し、個人の目的に直結するテーマで実践的な開発を行うことで、効率的なプログラミング学習を目指す。
学習における大原則:パラシュート勉強法
「先にやってみて、できないところを学ぶ」という原則(パラシュート勉強法)に従い、まずAIを活用して実装を試み、その過程で生じた不明点を解消していく。
STEP1: 学習内容の明確化
プログラミング学習の目的(プロジェクトでの必要性、スキルアップ、個人開発など)を明確にし、その目的に合致する学習対象を選定する。AIに相談し、最適なロードマップを作成することも有効。
STEP2: 実践的なテーマへの挑戦
開発したいものを実際に作ってみる。AIに実装方針を尋ね、できそうなことと難しそうなことに分類。できそうなことはコーディングし、AIにコードレビューを依頼。難しそうなことはAIにコード生成させ、コードを読み不明点をAIに質問する。
STEP3: 知識の体系化
書籍や技術ブログを活用し、STEP2と並行して学習を進める。コードを先に見た状態で書籍を読むことで、知識がよりスムーズに頭に入ってくる。
※これはGeminiによる生成物です
-
読みやすいコードを書く
zenn
@Josh Nobus
2025/05/05
226
読みやすいコードとは
脳に負荷がかからないコードであり、人間の脳の特性に配慮して書かれたコードです。また、情報伝達の数学的原理にも支配されます。
コードを読む目的
知らないコードを理解することと、一度理解したコードを思い出すことの2つに分けられます。読みやすいコードは、これらの目的をサポートする工夫が施されています。
トップダウン・アプローチの重要ポイント
READMEの用意、ディレクトリ構造の慣習への準拠、上から下へ読めるプログラム構成、処理単位の役割・意味の記述が重要です。
ボトムアップ・アプローチの重要ポイント
ディスプレイ表示範囲に収まる処理単位、適切なエラーメッセージ、役割・意味を把握できる命名、関数自体で入出力を把握できることが重要です。
コードの意図を明確にする
コードに反映されない「そのコードを書いた意図」はコメントとして残し、変数や関数には一貫した命名を行うことが重要です。
※これはGeminiによる生成物です
-
作りながら学ぶLLM入門:前処理
zenn
@kei忍者
2025/05/05
74
LLM前処理の全体像
LLM構築のフローは、テキストデータ収集、前処理、データローダー作成、モデル構造実装、トレーニング、評価と推論のステップで進行します。前処理とデータローダー作成が特に重要で、後の学習効率やモデル性能に影響します。
トークン化の基礎
トークン化は、文章を単語やサブワードなどの単位に分割し、それぞれに一意のIDを割り当てる操作です。これにより、コンピュータが文字列を数値として扱えるようになり、LLMの学習が可能になります。
サブワード分割の重要性
サブワード分割は、単語単位で語彙を作成する際の辞書の肥大化や未知語問題に対処するために重要です。BPEなどの手法を用いて、頻出する文字の組み合わせをサブワードとして登録し、未知語を可能な限り減らします。
特殊トークンの活用
UNKトークン(未知語)、BOS(文の開始)、EOS(文の終了)、PAD(パディング)などの特殊トークンは、LLMにおいて重要な役割を果たします。GPT系モデルでは、EOSトークンのみを使用し、PADやUNKトークンの代替としてサブワード分割を活用します。
埋め込みの役割
埋め込みは、トークンIDをモデルが扱える連続ベクトル表現に変換する工程です。これにより、単語IDが高次元の実数ベクトルに対応づけられ、モデル内部で類似単語が類似ベクトルとして扱われるようになります。
※これはGeminiによる生成物です
-
プロンプトエンジニアリングは死んだ(in 2025)
qiita
@hokutoh
2025/05/05
213
プロンプトエンジニアリングの必要性の減少
最新AIモデルの文脈理解向上により、曖昧な指示でも適切に対応可能になり、プロンプトエンジニアリングの必要性が急速に減少しています。
AIの民主化
AIの民主化が進み、特別な知識がなくても誰もが容易にAIを利用できるようになりました。無料学習リソースの整備も進んでいます。
新たなAI関連職種の台頭
AIトレーナー、データスペシャリスト、AIセキュリティスペシャリストなど、プロンプトエンジニアリングに代わる新たな職種が台頭してきています。
プロンプトエンジニアリングのスキルは共通知識へ
プロンプトエンジニアという職種は減少傾向ですが、プロンプトエンジニアリングのスキルはAIと協働する全職種の共通知識として統合されています。
AIとの対話アプローチの重要性
生成AIとの対話アプローチ(必要な情報を与えること)は、エージェントによるサポートの進化があっても依然として重要です。
※これはGeminiによる生成物です
-
LLMでコードレビューする際の自分用環境を整える
zenn
@YuheiNakasaka
2025/05/04
158
LLMコードレビュー環境構築の背景
既存のLLMコードレビューは、言語やフレームワーク一般の観点、または単一プロダクトに閉じた観点でのレビューに限られ、業務知識や関連プロダクト全体を通じたシステム観点からのレビューが不足している。よりプロダクションレベルのレビューを実現するために、自分用の環境を構築する必要がある。
コードレビューガイドラインの作成
より高度なコードレビューを実現するため、Code Complete、プリンシプル オブ プログラミング、Google Engineering Practices Documentation、ThoughtbotのCode Reviewガイド、RubyOnRailsコードレビュー書籍などの情報を NotebookLM に集約し、「一般的なコードレビュー観点」と「Railsアプリ特有のコードレビュー観点」をまとめた。
レビュアー人格の作成
コードレビューの質を向上させるために、疑い深く意地悪なほど隅々まで見るようなレビュアー人格を作成。良い点にはコメントせず、修正点や気になる点のみ指摘するよう行動原則を定義し、LLMによるレビューの精度と厳格さを高めた。
レビュー実行環境の構築
GitHub APIを用いてPRの内容を取得し、ローカルのtmpファイルに保存。ローカルリポジトリを指定することで、関連プロダクト全体を考慮したレビューを可能にした。プロンプトを工夫することで、複数のリポジトリを参照させ、システム全体の観点からのレビューを実現。
ローカル実行による柔軟性と事前チェック
レビューは GitHub Actions で自動化するのではなく、手元の Cursor や Cline で実行する方法を選択。これにより、ガイドラインやプロンプトを柔軟に修正しながら実行でき、Linter のように実装 PR の事前チェックとして活用できる。
※これはGeminiによる生成物です
-
MCPで変わるAIエージェント開発
qiita
@ksonoda
2025/05/04
59
AIエージェントの進化とMCPの登場
AIエージェントは、ユーザーの意図を理解し、複数の処理を自律的にこなすプログラムとして進化しており、MCP(Model Context Protocol)は、このAIエージェントが外部サービスと連携するための重要な技術です。
MCP(Model Context Protocol)とは
MCPはAnthropic社からリリースされた、LLM(Model)が応答テキストを生成する際に必要となるヒント(Context)を取得するための仕組み(Protocol)で、業界標準のオープンな仕様であり、再利用・配布が可能です。
MCP実装のメリット
MCPを実装することで、AIエージェントはリアルタイム情報を取得し、自律的に様々な外部サービスと連携できるようになります。これにより、最新情報に基づいた応答や、より高度なタスクの実行が可能になります。
MCPのクライアント・サーバー型アーキテクチャ
MCPはクライアント・サーバー型のアーキテクチャを採用しており、外部サービスの操作ロジック(MCPサーバー)とその実行指示を出すロジック(MCPクライアント)を分離し、両者を独立して開発・提供可能にしています。
MCPとFunction Callingの違い
Function CallingはOpenAIの独自仕様で再利用性に課題があるのに対し、MCPは業界標準を目指しLLMに依存せず、外部サービス処理ロジックの再利用性が高い点が異なります。
※これはGeminiによる生成物です
-
AI駆動開発組織の運営を1年ほど取り組んで得た学び9選
qiita
@kumai_yu
2025/05/03
199
AI駆動開発にはエンジニアの技量が必須
AIが生成するコードの妥当性を判断できない場合、エンジニアの技量が不可欠。シニアエンジニアによるアーキテクチャ設計で、AIによる不明瞭なコード生成を回避できる。
厳格な要件定義と設計の重要性
AIはインプットに忠実なため、要件定義や設計が曖昧だと、意図しない実装になるリスクがある。より詳細な要件定義と設計が重要となる。
プリセールスでのAI活用
要件が不明確な段階で、AIによるモックアップやドキュメント生成は非常に有効。顧客への提案や営業活動の幅を広げ、競争力を高める。
プレイングマネージャーの推奨
AI駆動開発組織では、PMは管理だけでなく、実装などの実務を理解し、AIに適切な指示を出すプレイングマネージャーが理想的。技術的な観点からの成果物チェックも重要。
AIエージェント型ツールは負の遺産解消に
DevinなどのAIエージェント型ツールは、リファクタリングやドキュメント更新など、将来的な負の遺産となりうるタスクに利用するのが効果的。
※これはGeminiによる生成物です