投稿

【Swift】テストできない、純粋関数を意識しようよ。

はじめに SwiftUIでアプリを開発していると、 View の中にロジックを書いてしまい、いざ単体テストをしようとするとテストできない……そんな経験はありませんか? 「実装者がどこまで想定して動作確認をおこなったのか分からない」「テストがしにくく、バグが潜んでいても気付きにくい」など、テストのしづらさは品質の低下につながります。 そこで重要なのが 純粋関数(Pure Function) です。本記事では、純粋関数を活用して、テストしやすいコードを設計する方法について解説します。 SwiftUIのViewの中にロジックを書くと何が問題? SwiftUIでは、 View の中にロジックを書くと次のような問題が発生します。 1. テストが困難になる View はUIの描画を行うためのものであり、状態を持つことが多いため、 純粋に入力→出力の関係に基づいたテストができなくなる ことが多いです。 struct ContentView: View { @State private var count: Int = 0 var body: some View { VStack { Text("\(count)") Button("Increment") { count += 1 } } } } この例では、ボタンを押すたびに count が増えますが、 このロジックを単体テストしようとすると、UIのイベントをシミュレートする必要があります。 2. 動作確認の範囲が曖昧になる 実装者がどの条件を想定して動作確認を行ったのか分からないため、 バグが潜んでいても気付きにくくなります。 純粋関数を活用しよう 純粋関数とは、 副作用がない(外部の状態を変更しない) 同じ入力に対して常に同じ出力を返す という特性を持つ関数のことです。 純粋関数を用意すると、テストがしやすくなります。 例:ビジネスロジックを分離する 先ほどの count の更新を純粋関数に切り出してみましょう。 func increment(_ value: Int) ...

【LLM】生成AIのシステムプロンプトのサンプル

 システムプロンプトのサンプル 日本語指定

【AI小説】10年前の話 とある村に立ち寄った時に、老人から教わった家庭の魔法

 リュウは、埃っぽい古書を読み漁りながら、記憶を辿っていた。10年前、まだ幼かった彼は、師匠であるフリンの指示で、魔力調査のため、人里離れた小さな村を訪れていた。フリンは、稀に現れる特殊な魔力を持つ人間を探しており、リュウはその手伝いを任されていた。 村はずれの、苔むした石畳の道を歩いていると、古びた家屋の前に、腰の曲がった老人が座っているのを見つけた。老人は、庭で野菜を育てており、リュウは思わず声をかけた。 「こんにちは、おじいさん。何か手伝うことはありますか?」 老人は、顔を上げ、穏やかな笑顔でリュウを迎えた。 「おや、若い魔法使いじゃな。わしは、この村の庭師のゲンゾうじゃ。手伝うことは特にないが、もしよければ、わしの庭で少し休憩していきなさい」 リュウは、ゲンゾウの誘いに応じ、庭で休憩することにした。ゲンゾウは、リュウに庭で育てている野菜を振る舞い、畑仕事の合間に、様々な話をしてくれた。 「わしは、若い頃から、この畑で野菜を育ててきた。魔法の力は使えないが、土と対話するように育てれば、どんな野菜でも美味しく育つものじゃ」 リュウは、ゲンゾウの言葉に興味を持ち、畑仕事を手伝うことにした。ゲンゾウは、リュウに、野菜の育て方だけでなく、畑仕事に使う簡単な魔法を教えてくれた。 「これは、野菜の成長を促進する魔法じゃ。土に魔力を込めれば、野菜はぐんぐん育つ。ただし、魔力を込めすぎると、野菜は腐ってしまうから、注意が必要じゃ」 リュウは、ゲンゾウから教わった魔法を使い、野菜の成長を促進した。魔法の力で、野菜はみるみるうちに大きくなり、リュウは驚きを隠せなかった。 「すごい!本当に成長が早くなってる!」 ゲンゾウは、リュウの興奮した様子を見て、微笑んだ。 「魔法は、あくまで道具じゃ。大切なのは、土と対話し、野菜を慈しむ心じゃ」 ゲンゾウは、リュウに、他にも様々な魔法を教えてくれた。料理の味を良くする魔法、洗濯物を綺麗にする魔法、壊れた道具を一時的に修復する魔法など、どれも実用的な魔法ばかりだった。 「これらの魔法は、わしが若い頃に、旅先で出会った魔法使いから教わったものじゃ。生活を豊かにする魔法は、戦闘魔法ほど派手ではないが、人々の暮らしを支える大切な魔法じゃ」 リュウは、ゲンゾウから教わった魔法を、フリンに報告した。フリンは、リュウの報告に興味を示さなかったが、リ...

【AI小説】「師匠の価値観アップデート」

「ねえ、リュウ。今日、人間たちは何か特別なことをするのかしら?」 フリンは、琥珀色の瞳を輝かせ、リュウに問いかけた。居酒屋のカウンターに並んだ、魔法で冷やされた麦酒を一口飲みながら。 「え?今日はホワイトデーですよ、師匠」 リュウは、フリンの質問に少し驚きながら答えた。この世界には、そもそもチョコレートという概念すらない。ホワイトデーについても、フリンが知っているはずがない。 「ホワイトデー?それは、一体何かしら?」 フリンの質問に、リュウは少し戸惑った。どう説明すれば、この1200歳のエルフに、人間界の習慣を理解させられるだろうか。 「あの、バレンタインデーにチョコレートをもらった人が、お返しをする日です。感謝の気持ちを込めて、お菓子とか、プレゼントを贈るんです」 リュウの説明に、フリンは眉をひそめた。 「チョコレート?お返し?感謝の気持ち?どういうことかしら?エルフの世界では、贈り物をするのは、特別な場合に限られる。感謝の気持ちは、言葉で伝えるものよ」 フリンの言葉に、リュウは苦笑した。 「師匠、人間は、言葉だけでは伝えきれない感情を、贈り物で表現することがあるんです。例えば、チョコレートは、甘いだけでなく、相手への愛情や感謝の気持ちを込めることができる、特別な食べ物なんです」 「なるほど…特別な食べ物、ね。でも、なぜ、チョコレートをもらった人が、お返しをしなければならないの?受け取った時点で、感謝の気持ちは伝わっているはずよ」 フリンの質問は、核心を突いていた。リュウは、少し考えてから答えた。 「それは…人間関係のバランスを取るため、というか…相手に気を遣わせないように、という気持ちもあるんです。お返しをすることで、相手との関係を円滑に保つことができる、と考えている人もいます」 フリンは、リュウの言葉に納得していない様子だった。 「人間関係のバランス?円滑に保つ?そんな面倒なこと、エルフの世界にはないわ。私たちは、自分の気持ちに正直に生きている。相手に気を遣ったり、バランスを取ったりするようなことはしないわ」 フリンの言葉に、リュウは少し笑ってしまった。 「師匠は、本当に人間とは違う考え方をしているんですね」 「当たり前よ。私は、1200年も生きてきたエルフだもの。人間の短い人生の価値観なんて、理解できないことばかりよ」 フリンは、そう言いながら、麦酒を飲み干...

【LLM】Ollamaをつかってgemma3:27bを動かしてみた。

Gemma 3 動作環境と利用状況 Gemma 3 を動作させるための環境と、実際に利用してみた状況についてまとめました。 動作環境 GPU: RTX-3090 OS: Ubuntu 利用条件 Gemma 3 を利用するには、 Ollama 0.6 以上をインストールする必要があります。 実行コマンド 4Bモデル: ollama run gemma3:4b 12Bモデル: ollama run gemma3:12b 27Bモデル: ollama run gemma3:27b 利用感 個人または少人数での利用であれば、十分な性能を発揮できます。 GPU使用率は90%程度まで上昇しますが、それなりに利用可能です。 多人数での利用の場合、多少の待ち時間が発生する可能性があります。 GPUメモリが不足する場合は、量子化された軽量モデル、または12Bモデルなどを利用することを推奨します。

【LLM】LLaMA-Factoryを使ってファインチューニングする方法(調査中)

 確認中・・・・。 LLaMA-Factoryをセットアップ UI起動 データセット用意 解析 ーーー データセットの用意方法と解析用のパラメータを調査する

【LLM】ollama modelfile error

サンプルを試したら下記のようなエラーがでた  Error: (line 7): command must be one of "from", "license", "template", "system", "adapter", "parameter", or "message" from とかが全部大文字で書いていたけど、小文字にするのが正しいらしいです。

【LLM】ベースモデルはgemma2を使って、LoRAで追加してみた。(これから)

 やり方は、これから調べながらやる。 ollamaが動く環境があることを前提とする。 すでに、Docker使って、ollama + OpenWebUIの環境作って動作できている状態で そこからgemma2:9Bがいい感じに動いたので、独自の値を追加し当たらな情報を返したい 例えば、子どもの誕生日とか、特定の情報を追加してオレオレ生成AIを作っていきたい。 そしたら、思い出とかも追加して、いつ何があったか?とか出力してくれるのでは?と。

LLM(大規模言語モデル)をOllama使ってローカルで動かす。

タイトルの通りです。 ただのこれからやってみるよ。 って言う 宣言です。 これから、実際にPCを構築して、動作確認していきます。 そのうち、更新していきます・・・。 とりあえず。 RTX-3090 で LLM動かせた。 RTX-3090でOllamaを利用して動作可能な言語モデルは、 Gemma2:27B やdeepseek-r1:32bのあたりが限界でした。 これ以上大きい言語モデルはOOMが発生して、起動できなかったです。

htmlでSEO対策ってさ。

SEO対策の基本を語ります お久しぶりです!最近、仕事が立て込んでおり、ブログの更新が遅くなっていました。ようやく落ち着いてきたので、久々に執筆させていただきます。 今回のテーマは、ウェブサイトの集客に欠かせない SEO対策 です。 SEO対策には、専門の業者に依頼するのが一番手っ取り早いと思っています。指摘された箇所を修正するだけで、効果を実感できるでしょう。しかし、資金に余裕がない私のような場合は、 自力で試行錯誤し、効果測定を繰り返す しかありません。 そこで今回は、SEO対策の 基本中の基本 をお伝えします。 # SEO対策ってどうするの? SEO対策は、様々なテクニックがありますが、まずは以下の2点を意識するだけで、大きく改善する可能性があります。 コンテンツの内容が充実しているか? 検索する人のことを考えているか? これら2点をしっかり守れば、なんとかなります!細かいSEO対策テクニックは、専門誌やウェブサイトで学ぶのがおすすめです。 コンテンツの内容が充実しているか? ここが一番重要です。あなたのウェブサイトのコンテンツは、 「読みたい!」と思わせる内容 になっていますか? ただのメモ書きや、自慢話だけになっていませんか? 読者の役に立つ情報、面白い情報、共感できる情報など、読者の心に響くコンテンツ作りを心がけましょう。 検索する人のことを考えているか? 読者がどんなキーワードであなたのサイトを探しているのかを考えましょう。 Googleの検索窓で、あなたのサイトを見つけるために使われるであろうキーワードは? 例えば、「美味しいケーキ レシピ 簡単」のように、具体的なキーワードを意識してコンテンツを作成することで、検索結果の上位表示を目指せます。 以上、SEO対策の基本でした。 最後に、こんなサイトを見に来てくれてありがとうございます!