投稿
【iOS】UILabel等でヒラギノフォント表示問題:文字が切れる原因と対策【sizeToFit()対策も】
- リンクを取得
- ×
- メール
- 他のアプリ
iOS開発でヒラギノフォントを指定した場合、 UILabel や UIButton で文字が表示される際に、一部の文字が切れてしまう問題は、多くの開発者が遭遇する悩ましい問題です。特に sizeToFit() メソッドを使用すると、その傾向が顕著になります。 本記事では、この問題の原因を深堀りし、いくつかの対策方法を紹介します。 なぜ文字が切れてしまうのか? ヒラギノフォントは、他のフォントと比較して、文字の高さやベースラインの位置が微妙に異なる場合があります。iOSのレイアウトエンジンが、この差異を適切に処理できない場合に、文字が途中で切れてしまう現象が発生します。 特に、以下の文字で発生しやすいです。 ①gjpqyÄÖÜßĀĂĄąĆĈĊČĎŅ これらの文字は、文字の形状が複雑であったり、上付き文字や下付き文字を含むため、レイアウトエンジンが正しく処理できない場合があります。 対策方法 いくつかの対策方法を試してみましょう。 1. AttributedStringの調整 (ベースラインオフセット) 他のサイトで紹介されているように、 NSAttributedString の baselineOffset を調整する方法は有効な手段の一つです。 let attributedString = NSAttributedString(string: "問題のある文字列", attributes: [ .font: UIFont(name: "ヒラギノ角ゴシック W3", size: 16)!, .baselineOffset: 1.0 // 少し上にずらす ]) label.attributedText = attributedString しかし、この方法だけでは、ÄÖÜの「..」部分が切れてしまうケースがあります。 2. clipsToBounds = false そこで、意外と盲点になりがちなのが、 clipsToBounds プロパティです。 label.clipsToBounds = false この設定により、文字が切れる問題を回避できる場合があります。ただし、画面の上下にViewがピッタリと配置されている場合は、文字がはみ出てしまう可能性があるため、注意が必要です。 ...
【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) ...
【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モデルなどを利用することを推奨します。
htmlでSEO対策ってさ。
- リンクを取得
- ×
- メール
- 他のアプリ
SEO対策の基本を語ります お久しぶりです!最近、仕事が立て込んでおり、ブログの更新が遅くなっていました。ようやく落ち着いてきたので、久々に執筆させていただきます。 今回のテーマは、ウェブサイトの集客に欠かせない SEO対策 です。 SEO対策には、専門の業者に依頼するのが一番手っ取り早いと思っています。指摘された箇所を修正するだけで、効果を実感できるでしょう。しかし、資金に余裕がない私のような場合は、 自力で試行錯誤し、効果測定を繰り返す しかありません。 そこで今回は、SEO対策の 基本中の基本 をお伝えします。 # SEO対策ってどうするの? SEO対策は、様々なテクニックがありますが、まずは以下の2点を意識するだけで、大きく改善する可能性があります。 コンテンツの内容が充実しているか? 検索する人のことを考えているか? これら2点をしっかり守れば、なんとかなります!細かいSEO対策テクニックは、専門誌やウェブサイトで学ぶのがおすすめです。 コンテンツの内容が充実しているか? ここが一番重要です。あなたのウェブサイトのコンテンツは、 「読みたい!」と思わせる内容 になっていますか? ただのメモ書きや、自慢話だけになっていませんか? 読者の役に立つ情報、面白い情報、共感できる情報など、読者の心に響くコンテンツ作りを心がけましょう。 検索する人のことを考えているか? 読者がどんなキーワードであなたのサイトを探しているのかを考えましょう。 Googleの検索窓で、あなたのサイトを見つけるために使われるであろうキーワードは? 例えば、「美味しいケーキ レシピ 簡単」のように、具体的なキーワードを意識してコンテンツを作成することで、検索結果の上位表示を目指せます。 以上、SEO対策の基本でした。 最後に、こんなサイトを見に来てくれてありがとうございます!
【html】html でlayoutの基本はdisplay: gridでよいのでは? 横に並べたり、縦に並べたり
- リンクを取得
- ×
- メール
- 他のアプリ
シンプルなレスポンシブサイト構築なら、もうGrid Layoutで決まり! 最近、シンプルなレスポンシブサイトを構築する際、レイアウト方法に迷うことはありませんか? そんな時は、 CSS Grid Layout を使うのが、もう一番無難でオススメです! 特に、横並びで均等割りのレイアウトを実現したい場合、Grid Layoutは非常に強力なツールとなります。 例えば、横3列で均等に要素を配置したい場合、以下のCSSコードで簡単に実現できます。 display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; このコードのポイントは、 grid-template-columns: repeat(3, 1fr); の部分です。 repeat(3, 1fr) は、「1fr」という単位を3回繰り返すという意味で、各列に均等なスペースを割り当てます。 列数を調整したい場合 は、 3 の部分を 2 や 1 に変更するだけでOK! 簡単に列数を変更できるので、様々な画面サイズに対応したレスポンシブデザインも容易に実現できます。 さらに、要素間の 隙間は gap プロパティ で調整できます。 gap: 16px; のように指定することで、要素間に16pxの隙間が生まれます。この値を調整することで、見た目のバランスを整えることができます。 Grid Layoutは、複雑なレイアウトもシンプルに記述できるだけでなく、レスポンシブデザインにも柔軟に対応できるため、現代のWebサイト構築において非常に強力なツールです。 ぜひ、Grid Layoutを活用して、効率的で美しいWebサイトを構築してみてください!
【html】safariでvideoタグの上にかぶせてうまく表示できない件
- リンクを取得
- ×
- メール
- 他のアプリ
Safariでvideoタグの上にかぶせてうまく表示できない件 HTMLでコーディングしていて、動画の上に別のタグを重ねるデザインを実装したところ、Safariでの表示に問題が発生しました。他のブラウザでは正常に表示されるのに、Safariだけ動画の裏側に要素が表示されてしまい、困っていました。 原因として、 z-index の問題か、Safariのレンダリング順序の問題かと考え、調べてみました。 その結果、以下のCSSを追加することで、重ねて表示できるようになりました。 ----解決策---- transform: translateZ(1px); /* 回避手段 */ この方法で、Safariでも動画の上に要素を正しく重ねて表示できるようになりました。
Guideline 4.3(a) - Design - Spam
- リンクを取得
- ×
- メール
- 他のアプリ
リジェクトされた、しかもスパム扱い これどうしたらよいだろうか・・・・ クライアントにこのアプリ作ってって言われて作成しただけなのに Guideline 4.3(a) - Design - Spam We noticed your app shares a similar binary, metadata, and/or concept as apps submitted to the App Store by other developers, with only minor differences. Submitting similar or repackaged apps is a form of spam that creates clutter and makes it difficult for users to discover new apps. Next Steps Since we do not accept spam apps on the App Store, we encourage you to review your app concept and submit a unique app with distinct content and functionality. ---- ガイドライン4.3(a) - デザイン - スパム あなたのアプリは、他の開発者がApp Storeに提出したアプリと、バイナリ、メタデータ、および/またはコンセプトが類似しており、わずかな違いしかありません。 類似したアプリやリパッケージされたアプリの提出は、乱雑さを生み出し、ユーザーが新しいアプリを発見することを困難にするスパムの一形態です。 次のステップ App Storeではスパムアプリを受け付けておりませんので、アプリのコンセプトを見直し、明確なコンテンツと機能を備えたユニークなアプリをご提出ください。
【C#】C#でuser32.dllを使用してマウスカーソルを消す
- リンクを取得
- ×
- メール
- 他のアプリ
C#でuser32.dllを使用してマウスカーソルを消すには、 P/Invoke(Platform Invocation Services)を利用してWindows APIを呼び出します。 以下の手順で、マウスカーソルを非表示にする方法を説明します。 user32.dllのインポート:user32.dllのShowCursor関数を呼び出すために、P/Invokeを使います。 ShowCursor関数の呼び出し:ShowCursor関数は、カーソルの表示状態を変更するために使います。 関数の引数にfalseを渡すことでカーソルを非表示にできます。 以下に、C#コードの例を示します。 using System; using System.Runtime.InteropServices; class Program { // user32.dllのShowCursor関数をインポート [DllImport("user32.dll")] private static extern int ShowCursor(bool bShow); static void Main(string[] args) { // カーソルを非表示にする ShowCursor(false); Console.WriteLine("Press any key to show cursor again..."); Console.ReadKey(); // カーソルを表示する ShowCursor(true); } } ちょっと頑張ってかきなおした。 C#でマウスカーソルを非表示にする方法 (P/Invoke) マウスカーソルを非表示にすることで、特定のアプリケーション(ゲーム、全画面表示のアプリケーションなど)の操作性を向上させたり、より没入感のある体験を提供したりすることができます。C#では、P/Invoke(Platfrom Invocation Services)を利用してWindows APIの ShowCursor 関数を呼び出す...
iOS 18 対応予定 機種一覧
- リンクを取得
- ×
- メール
- 他のアプリ
iOS 18対応予定機種一覧 機種 iPhone 15 iPhone 15 Plus iPhone 15 Pro iPhone 15 Pro Max iPhone 14 iPhone 14 Plus iPhone 14 Pro iPhone 14 Pro Max iPhone 13 iPhone 13 mini iPhone 13 Pro iPhone 13 Pro Max iPhone 12 iPhone 12 mini iPhone 12 Pro iPhone 12 Pro Max iPhone 11 iPhone 11 Pro iPhone 11 Pro Max iPhone XS iPhone XS Max iPhone XR iPhone SE(第2世代) iPhone SE(第3世代)
else は使わない。
- リンクを取得
- ×
- メール
- 他のアプリ
どっちのコードがお好き? ソースコードレビューしていて、ふと気になった点があります。条件分岐の書き方について、どちらのスタイルが多いのか、あるいはどちらが読みやすいと感じるか、といったことです。 私は後者の書き方が好きで、ソースコードの最初に「ダメな条件」を記述し、最後に「問題ない時の処理」を記述するのが好みです。これは、コードの意図が明確になり、可読性が向上すると思ってます。 ------------- if (aaaaaa == 1) { // 問題ない時の処理 } else { print("エラーだよ"); } ------or------- if (aaaaaa != 1) { print("エラーだよ"); return; } // 問題ない時の処理 ------------- 上記2つのコードは、どちらも同じ処理を行います。しかし、書き方によってコードの理解しやすさが変わってきます。前者では、条件が真の場合と偽の場合の両方を記述する必要があり、コードが少し長くなる可能性があります。一方、後者では、エラー条件を最初にチェックし、エラーの場合はすぐに処理を中断するため、コードが簡潔になり、可読性が向上します。この「エラー条件を最初にチェックする」という書き方は、「早期リターン」と呼ばれ、多くのプログラミングコミュニティで推奨されています。 早期リターンを採用することで、ネストされた条件分岐を減らすことができ、コードの複雑さを軽減できます。また、エラー処理が明確になり、デバッグが容易になります。もちろん、どちらの書き方が正解というわけではありません。チームのコーディング規約や個人の好みに合わせて選択することが重要です。しかし、早期リターンは、可読性、保守性、デバッグの容易性を向上させるための有効な手段の一つと言えるでしょう。
【iOS】reject Guideline 2.3.10 - Performance - Accurate Metadata
- リンクを取得
- ×
- メール
- 他のアプリ
テレビでYouTube見る時、チャットは別画面でみたいよね
- リンクを取得
- ×
- メール
- 他のアプリ
最近、テレビでYouTubeを見る機会が増えていませんか?多くのの人が、好きなYouTuberの動画やライブ配信を楽しんでいることと思います。ライブ配信では、コメントだけでなくチャット機能を使って、演者とリアルタイムなやり取りが可能です。 しかし、テレビでYouTubeを見ると、チャットが画面の右半分ほどを占めてしまい、動画を全画面で楽しむことができません。チャット部分を別画面で表示できないだろうか、と疑問に思う方も多いでしょう。 チャット部分を別画面で表示する方法は? 実は、チャット部分を別画面で表示する簡単な方法があるのです。以下のURLに、配信中のビデオIDを「v=」の後に追加するだけで、チャット部分を別画面で表示することができます。 チャット別画面表示URL: https://www.youtube.com/live_chat?v=配信ID 使い方 テレビでYouTubeのライブ配信を開きます。 配信URLの「v=」の後に配信IDを追加します。 例:配信ID「123456789」の場合、URLは「https://www.youtube.com/live_chat?v=123456789」となります。 修正したURLをスマホなどのブラウザで開くと、チャット部分が別画面で表示されます。 注意事項 GoogleはこのURLの仕様を頻繁に変更する場合があるので、注意が必要です。 まとめ テレビでYouTubeチャット別画面表示機能を使えば、動画を全画面で楽しむと同時に、チャットも快適に閲覧することができます。ぜひ試してみてください!
android 15 (beta)が公開された
- リンクを取得
- ×
- メール
- 他のアプリ
beta板ですが公開された様子 android 15で今のところ対応しているのは下記 おそらく、pixel 6は最後のOSアップデートになると思います Pixel 6/6 Pro Google Pixel 6a Google Pixel 7/7 Pro Google Pixel 7a Google Pixel Fold Google Pixel Tablet Google Pixel 8/8 Pro スマホ業界も 成熟期後半に差し掛かっていると思うので、今後どう進んでいくのか楽しみ。 個人的には、apple Visionがでたので。 google Visionもでてくれないかな?と。 おもいました。
Rocky Linux 9
- リンクを取得
- ×
- メール
- 他のアプリ
Rocky Linux 9 最小構成インストール後の設定手順 Rocky Linux 9を最小構成でインストールした場合、よく忘れがちな初期設定手順をメモとして記載します。 1. システムアップデート # dnf -y update まず、最新の状態に更新します。 2. ネットワーク設定 # nmtui IPアドレスを固定化する場合は設定してください。(すでに設定済みの場合 は不要です。) 3. 再起動 # shutdown -rf now アップデート内容を反映させるために再起動します。 4. IPアドレス確認 # ip addr 再起動後、IPアドレスが正しく設定されているか確認します。 上記コマンドで、自分のIPアドレスを確認してください。 補足: # はroot権限でコマンドを実行することを意味します。 nmtui はテキストベースのネットワーク設定ツールです。GUI環境がない場合でも利用できます。 上記は基本的な設定手順です。必要に応じて、ファイアウォール設定、SSH設定、ユーザー作成などの設定を追加してください。
【iOS】今更聞けない UIViewControllerのライフサイクル その2 (Swift)
- リンクを取得
- ×
- メール
- 他のアプリ
【iOS】今更聞けないUIViewControllerのライフサイクル その2 (Swift) 過去に書いていたのですが、意外と観ていただいている人がいたので、更新版です 忘れやすいですよね もう少し、細かいイベントを追加しました 表示する時 awakeFromNib loadView viewDidLoad loadViewIfNeeded viewWillAppear viewLayoutMarginsDidChange viewSafeAreaInsetsDidChange updateViewConstraints viewIsAppearing viewWillLayoutSubviews viewDidLayoutSubviews viewDidAppear 別ページ表示する時 viewWillLayoutSubviews viewDidLayoutSubviews viewWillDisappear viewWillLayoutSubviews viewDidLayoutSubviews viewDidDisappear import UIKit class ViewController: UIViewController { override func awakeFromNib() { super.awakeFromNib() print("awakeFromNib") } override func loadView() { super.loadView() print("loadView") } override func viewDidLoad() { super.viewDidLoad() print("viewDidLoad") } override func loadViewIfNeeded() { super.loadViewIfNeeded() print("loadViewIfNeeded")...
【bard】15日後に風邪をひくプログラマ
- リンクを取得
- ×
- メール
- 他のアプリ
2024年2月1日、東京・品川区のオフィス街。 28歳のプログラマ、佐藤は、いつものようにオフィスで仕事をしていた。 佐藤は、新しく開発中のゲームのプログラムを担当していた。 ゲームは、プレイヤーが巨大なモンスターと戦うアクションゲームだった。 佐藤は、ゲームのグラフィックやサウンドも担当していた。 佐藤は、ゲームの完成に向けて、日々懸命に取り組んでいた。 しかし、その日、佐藤はいつもと違う違和感を感じていた。 頭がぼんやりするし、体がだるい。 「風邪かな?」 佐藤は、心配になって、体温を測ってみた。 37.5度。 「やっぱり風邪だ。」 佐藤は、残念そうにため息をついた。 佐藤は、風邪をひくと、いつも仕事に支障をきたす。 頭がぼんやりして、集中力が続かない。 そのため、いつもより多くのミスをしてしまう。 「今日は、早めに帰ろう。」 佐藤は、上司に報告して、会社を後にした。 家に帰ると、すぐに布団に潜り込んだ。 「早く治れよ。」 佐藤は、そう呟いて、目を閉じた。 翌日、佐藤は、さらに体調が悪くなった。 頭痛がひどくなり、熱も38度を超えていた。 佐藤は、仕事を休んで、寝込むことにした。 3日後、佐藤の体調は少しずつ回復し始めた。 しかし、まだ頭痛や倦怠感は残っていた。 佐藤は、仕事に復帰するかどうか迷っていた。 「早く仕事に戻らないと、プロジェクトが遅れる。」 佐藤は、そう考えて、仕事に戻ることにした。 しかし、佐藤の体調は、まだ完全には回復していなかった。 仕事に集中できず、ミスを連発した。 上司は、佐藤の様子を見て、心配そうに言った。 「佐藤、まだ無理をしないほうがいいよ。」 しかし、佐藤は、仕事にこだわりすぎていた。 「大丈夫です。もう大丈夫です。」 佐藤は、そう言って、仕事を続けた。 しかし、佐藤の体調は、さらに悪化した。 頭痛がひどくなり、熱も39度を超えた。 佐藤は、とうとう倒れてしまった。 佐藤は、病院に運ばれ、入院した。 佐藤は、入院して2週間、ようやく退院することができた。 しかし、佐藤は、まだ完全には回復していなかった。 佐藤は、仕事に復帰することを断念した。 佐藤は、自分の過ちを反省した。 「もう、仕事に無理をしない。」 佐藤は、そう心に誓った。 佐藤は、しばらくの間、ゆっくりと休養をとることにした。 そして、体調が完全に回復したら、もう一度、仕...