土曜日, 12月 20, 2025
No menu items!
ホーム ブログ ページ 5127

セカオワ深瀬のちょいデブ姿に😍💖驚愕!

✍️ 編集部の感想

最近のセカオワの投稿、かわいさ満点ですね!「ちょいデブ」って愛らしい響きに心が温まりました。最近のニュースで盛り上がった彼らの新曲も楽しみです。どんな楽曲が生まれるのか、期待が高まります!ファンとして、これからも応援し続けます。セカオワの魅力に癒される毎日です。✨🎶

📸 投稿内容

data-instgrm-captioned data-instgrm-permalink=https://www.instagram.com/p/C-xdHMSzt1C"?utm_source=ig_embed&utm_campaign=loading" data-instgrm-version="14" style="background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin:1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);" >


Views: 0

『デビル メイ クライ 5』1000万本突破の快挙!


🔸 ざっくり内容:

『デビル メイ クライ 5』が全世界での販売本数1,000万本を突破したことが発表されました。このゲームは、2019年に発売され、6年間の長期間にわたって多くのプレイヤーに支持され続けてきました。

背景情報

『デビル メイ クライ』シリーズは、カプコンが手掛けるアクションゲームで、豪華なグラフィックとスタイリッシュなバトルが特徴です。特に5作目は、その伝統を受け継ぎつつ新しい要素も取り入れたことで、多くのファンを魅了しました。

重要な視点

  1. 長期的な人気:発売から数年経った今も購入され続けていることは、多くのリピートプレイヤーが存在することを示しています。
  2. ゲームの質:高い評価を受けたグラフィック、キャラクターのデザイン、バトルシステムが、プレイヤーのエンゲージメントを維持しています。
  3. 市場の動向:近年、ゲーム業界ではリピートタイトルの重要性が増しており、質の高いコンテンツが長期間にわたって利益をもたらす戦略が注目されています。

『デビル メイ クライ 5』の成功は、ただの一過性のヒットではなく、合わせて市場のトレンドを反映する結果とも言えるでしょう。今後もこのシリーズとともに、さらなる成長が期待されます。

🧠 編集部の見解:
『デビル メイ クライ 5』が全世界で1,000万本を突破したというニュース、すごいですね!発売から6年も経っているのに、いまだに多くのプレイヤーに支持されているというのは、そのクオリティや魅力がいかに高いかを物語っています。

私が感じたのは、シリーズが持つ独自のスタイルや魅力が、リピートタイトルとしての成功を支えているということです。美麗なグラフィックに加えて、爽快なアクションや魅力的なキャラクターたちが、プレイヤーを引きつける要因ですね。特に、ダンテやニコなど個性的なキャラクターは、ストーリーを彩る重要な要素です。

関連事例としては、他のロングセラーゲームも考えられます。例えば『ファイナルファンタジー』シリーズや『マリオ』シリーズも、何十年も経っても新作が出続け、リメイク版やリマスター版がヒットしています。こうしたゲームが長期にわたって愛される背景には、常に進化し続けるゲーム体験や、プレイヤーとの強い絆があると思います。

社会的影響としては、ゲームがエンターテインメントの一形態として認知され、業界全体が成長するきっかけにもなっています。特にコロナ禍において、在宅時間が増えたことからゲームへの関心が高まり、多くの新たなプレイヤーが誕生しました。このような背景も、リピートタイトルの成功に一役買っているのかもしれません。

さて、ちょっとした豆知識ですが、デビル メイ クライシリーズはもともと『鬼武者』シリーズの派生作品として企画されたことがあるんですよ!それが現在のスタイルに進化して、こんなにも愛されるゲームになったのですから、ほんとにゲーム業界の奇跡ですね。

  • キーワード: リピートタイトル


デビル メイ クライ 5 をAmazonで探す

ゲーム コンソール をAmazonで探す

アクションゲーム をAmazonで探す


※以下、出典元
▶ 元記事を読む

Views: 0

「3日間の睡眠不足、心臓リスク急増!」


🔸 ざっくり内容:

たった3日間の睡眠不足が心臓に及ぼす影響

背景情報
近年、「睡眠不足が健康に悪影響を及ぼす」という認識が広まっています。しかし、短期間の睡眠不足はそれほど深刻ではないと考えがちです。スウェーデンのウプサラ大学の研究によると、3日間の睡眠不足でも心臓病に関連するリスクが増加することが判明しました。

研究の概要
研究では、健康な男性16人を対象に「8.5時間睡眠」と「4.25時間睡眠」の二つの状態で、血中の約90種のタンパク質を分析しました。睡眠不足が続くと、心血管疾患に関連する炎症性タンパク質の濃度が上昇することが確認されました。さらに、運動による健康を支えるタンパク質の増加が鈍くなることも分かりました。

重要な影響

  1. 心臓病リスクの上昇: たった3日間の睡眠不足でも、心臓病と関連するバイオマーカーが増加。
  2. 運動の効果低下: 睡眠不足の状態では、運動による健康改善効果が減少。
  3. 血中タンパク質の変動: 血中の成分に加え、その変化が現れるタイミングにも影響があることが確認された。

専門家の見解
研究に関与するアイルランド王立外科医学院のアニー・カーティス准教授は、特に若い健康な成人においても、数日の不眠が心血管リスクに影響を及ぼすことを懸念しています。現代社会において、睡眠不足を経験する人が多いことから、注意が必要です。

この研究は、短期間の睡眠不足が健康にどれほど悪影響を及ぼすか、再認識させるものであり、特にシフト勤務などで睡眠リズムが乱れがちな人々にとって重要な警告を発しています。

🧠 編集部の見解:
この記事のテーマは、たった3日間の睡眠不足が健康、特に心臓に深刻な影響を及ぼす可能性についてです。研究によると、睡眠不足が引き起こす血液中の炎症性タンパク質の増加は、心血管疾患のリスクを高める一因であることが明らかとなりました。これは驚きですが、近年の研究でも繰り返し示されています。

### 感想

私も「今週はちょっと忙しいから、3日間だけなら寝なくても平気」と思ったことがありますが、その影響が心臓に及ぶかもと考えると、とても怖いですね。実際、忙しい現代社会では、睡眠時間を犠牲にすることが多々あります。その代償が何よりも大切な心臓に影響を及ぼすとは、考えてみればかなり恥ずかしいことだと思います。

### 関連事例

世界保健機関(WHO)によると、睡眠不足は心臓だけでなく、免疫機能や精神的健康にも悪影響を与えることが知られています。たとえば、睡眠不足が続くと、体重増加やうつ症状のリスクも高まるという研究結果もあります。日本でも、シフト勤務や長時間労働が問題視されており、約4人に1人が睡眠リズムを乱していると言われています。

### 社会的影響

この研究は、私たちの生活習慣や働き方を見直すきっかけになるかもしれません。特に、企業や学校が健康的な睡眠環境を提供するための施策を検討する必要があるでしょう。労働時間の短縮やフレックスタイム制度など、働き方の改革が求められています。

### 背景や豆知識

睡眠は体の生理的なプロセスにおいて非常に重要です。体内時計(サーカディアンリズム)が適切に働くことで、ホルモンバランスが保たれ、心血管系の健康も促進されます。逆に、睡眠不足によるホルモンの乱れは、ストレスの増加や炎症の進行に繋がります。

この研究を受けて、生活習慣を見直すことが自分自身を守る一歩になると感じました。それにしても、健康のためには「無理しない」「最優先で睡眠を取る」ことが、実は一番の近道かもしれませんね。

  • キーワード: 睡眠不足


睡眠不足 をAmazonで探す

エアロバイク をAmazonで探す

健康プロテイン をAmazonで探す


※以下、出典元
▶ 元記事を読む

Views: 0

Honkai Star Rail 3.4ライブストリーム:日付、時刻、キャラクター、バナー、および何を期待するか



Honkai:スターレール 3.4 LiveStreamは、HoyoverseによるターンベースのRPGがバージョン3.3の終わりに近づくため、すぐに発生するように設定されています。開発者は、今後のパッチに関する多くの詳細をまだ明らかにしておらず、ライブストリーム中にそうする可能性が高く、リリース日、新しい再生可能なキャラクター、キャラクターバナー構造、ストーリーの更新、イベントなどを強調します。進行中のベータテストのために、たくさんありました Honkai:スターレール 3.4リーク、 どれの 3つの新しい確認されたプレイ可能なユニットについて、ゲームプレイキットを詳しく説明しました、 例えば。


続きを見る


🧠 編集部の感想:
Honkai Star Railの3.4ライブストリームが楽しみです!新しいキャラクターやイベントの発表が期待され、プレイヤーとしてはワクワクします。今後のアップデートがどのようにゲームに影響を与えるのか、注目していきたいですね。

Views: 0

【AI agent活用】作業中のSNS断ちを強制する!!ポモドーロタイマー付きChrome拡張機能を作ってみた #JavaScript – Qiita



【AI agent活用】作業中のSNS断ちを強制する!!ポモドーロタイマー付きChrome拡張機能を作ってみた #JavaScript - Qiita

作業中についついSNSや動画サイトを開いてしまい、集中力が途切れてしまうことはありませんか?

「今度こそ集中するぞ!」と意気込んでも、気がつくとTwitterやYouTubeを開いてしまい、気づけば数時間経過…なんて経験、きっと多くの方が持っているのではないでしょうか。

そこで今回は、ポモドーロテクニックサイトブロック機能を組み合わせたChrome拡張機能を開発してみました。この記事では、

  • Chrome拡張機能の開発のススメ
  • AI agent(Codex)の活用方法

も含めて、Chrome拡張機能の作り方を詳しく解説していきます!

6/15日現在は、この拡張機能のリリースを申請中です。
ローカルでの使用方法を以下に記載してあります。

📱 完成した拡張機能の機能

まずは、今回作成した拡張機能の主な機能をご紹介します:

  • 25分間のポモドーロタイマー
  • タイマー実行中の集中力を妨げるサイトの自動ブロック
  • アイコン上に残り時間を表示
  • ブロック中のカスタムページ表示
  • タイマー完了時の通知表示

デモ動画

chrome-test.gif

↑画質が荒いのですが、お許しください

🎯 なぜこの拡張機能を作ったのか

私自身、研究や仕事において在宅ワークが増える中で集中力の維持に課題を感じていました。特に:

  1. 意志力に頼る限界: 「見ないようにしよう」と思っても、つい開いてしまう
  2. 既存ツールの不満: 市販のサイトブロッカーは設定が複雑で使いづらい
  3. ポモドーロテクニックとの組み合わせ: 25分という区切りでブロックしたい

これらの課題を解決するため、シンプルで使いやすい拡張機能を自作することにしました。

🤖 AI agentを活用した開発プロセス

今回の開発では、CodexというChatGPT内で動作するAI開発エージェントを積極的に活用しました。AIツールを使うことで、開発効率が大幅に向上したので、その過程もご紹介します。

AIとの対話例

: 「ポモドーロタイマー付きのサイトブロッカーChrome拡張機能を作りたいです。Manifest V3で、25分間特定のサイトをブロックする機能を実装したいのですが、どのような構成にすべきでしょうか?」

Codex: 「Manifest V3でのサイトブロック機能でしたら、declarativeNetRequestを使用するのが最適です。以下のような構成をお勧めします…」

このように、AIと対話しながら設計を固めていきました。特に以下の点でAIが有効でした:

  1. 技術選択の相談: 使用パッケージの最新仕様に関するアドバイス
  2. コード生成: 基本的な構造の雛形作成
  3. デバッグ支援: エラーの原因特定と解決策の提案
  4. ベストプラクティスの確認: セキュリティやパフォーマンスの観点

🏗️ 拡張機能の構成

Chrome拡張機能は以下のファイルで構成されています:

pomodoro-blocker-extension/
├── manifest.json          # 拡張機能の設定ファイル
├── popup.html             # ポップアップUI
├── popup.js               # タイマー制御ロジック
├── background.js          # サイトブロック制御
└── icons/                 # アイコンファイル
    └── icon.png

📝 開発ステップバイステップ

Step 1: manifest.jsonの設定

Chrome拡張機能の心臓部となるmanifest.jsonから始めます:

{
  "manifest_version": 3,
  "name": "Pomodoro Blocker",
  "version": "1.0",
  "description": "25分間タイマー+特定サイトを集中のためブロックする拡張機能",
  "permissions": [
    "activeTab",
    "storage",
    "declarativeNetRequest",
    "notifications"
  ],
  "host_permissions": [
    "*://facebook.com/*",
    "*://twitter.com/*",
    "*://youtube.com/*"
    // その他ブロック対象サイト
  ],
  "background": {
    "service_worker": "background.js"
  },
  "action": {
    "default_popup": "popup.html"
  }
}

ポイント:

  • manifest_version: 3で最新版を使用
  • declarativeNetRequestでサイトブロック機能を実装
  • storageでタイマー状態を永続化

Step 2: ポップアップUI(popup.html)

ユーザーがクリックする拡張機能のポップアップを作成:


 lang="ja">

     charset="UTF-8">
    </span>Pomodoro Blocker<span class="nt"/>
    <span class="nt"/>
        <span class="nt">body</span> <span class="p">{</span>
            <span class="nl">width</span><span class="p">:</span> <span class="m">300px</span><span class="p">;</span>
            <span class="nl">height</span><span class="p">:</span> <span class="m">200px</span><span class="p">;</span>
            <span class="nl">font-family</span><span class="p">:</span> <span class="n">Arial</span><span class="p">,</span> <span class="nb">sans-serif</span><span class="p">;</span>
            <span class="nl">text-align</span><span class="p">:</span> <span class="nb">center</span><span class="p">;</span>
            <span class="nl">padding</span><span class="p">:</span> <span class="m">20px</span><span class="p">;</span>
        <span class="p">}</span>
        
        <span class="nc">.timer-display</span> <span class="p">{</span>
            <span class="nl">font-size</span><span class="p">:</span> <span class="m">48px</span><span class="p">;</span>
            <span class="nl">font-weight</span><span class="p">:</span> <span class="nb">bold</span><span class="p">;</span>
            <span class="nl">color</span><span class="p">:</span> <span class="m">#333</span><span class="p">;</span>
            <span class="nl">margin</span><span class="p">:</span> <span class="m">20px</span> <span class="m">0</span><span class="p">;</span>
        <span class="p">}</span>
        
        <span class="nt">button</span> <span class="p">{</span>
            <span class="nl">padding</span><span class="p">:</span> <span class="m">10px</span> <span class="m">20px</span><span class="p">;</span>
            <span class="nl">font-size</span><span class="p">:</span> <span class="m">16px</span><span class="p">;</span>
            <span class="nl">border</span><span class="p">:</span> <span class="nb">none</span><span class="p">;</span>
            <span class="nl">border-radius</span><span class="p">:</span> <span class="m">5px</span><span class="p">;</span>
            <span class="nl">cursor</span><span class="p">:</span> <span class="nb">pointer</span><span class="p">;</span>
        <span class="p">}</span>
        
        <span class="nc">.start-btn</span> <span class="p">{</span>
            <span class="nl">background-color</span><span class="p">:</span> <span class="m">#4CAF50</span><span class="p">;</span>
            <span class="nl">color</span><span class="p">:</span> <span class="no">white</span><span class="p">;</span>
        <span class="p">}</span>
        
        <span class="nc">.stop-btn</span> <span class="p">{</span>
            <span class="nl">background-color</span><span class="p">:</span> <span class="m">#f44336</span><span class="p">;</span>
            <span class="nl">color</span><span class="p">:</span> <span class="no">white</span><span class="p">;</span>
        <span class="p">}</span>
    <span class="nt"/>
<span class="nt"/>
<span class="nt"/>
    <span class="nt"><h2/></span>Pomodoro Blocker<span class="nt"/>
    <span class="nt"><p> <span class="na">id=</span><span class="s">"timer-display"</span> <span class="na">class=</span><span class="s">"timer-display"</span><span class="nt">></span>25:00<span class="nt"/></p></span>
    
    <span class="nt"><p> <span class="na">class=</span><span class="s">"controls"</span><span class="nt">></span>
        <span class="nt"><button> <span class="na">id=</span><span class="s">"start-btn"</span> <span class="na">class=</span><span class="s">"start-btn"</span><span class="nt">></span>開始<span class="nt"/></button></span>
        <span class="nt"><button> <span class="na">id=</span><span class="s">"stop-btn"</span> <span class="na">class=</span><span class="s">"stop-btn"</span><span class="nt">></span>停止<span class="nt"/></button></span>
    <span class="nt"/></p></span>
    
    <span class="nt"></span><span class="s">"popup.js"</span><span class="nt">></span>
<span class="nt"/>
<span class="nt"/>
</span></span></span></code></pre>
</div>
</div>
<h3 data-sourcepos="171:1-171:44">
<a href="#step-3-%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E5%88%B6%E5%BE%A1popupjs"><i class="fa fa-link"/></a>Step 3: タイマー制御(popup.js)</h3>
<p data-sourcepos="173:1-173:64">ポップアップの動作を制御するJavaScriptを実装:</p>
<div class="code-frame" data-lang="javascript" data-sourcepos="175:1-231:3">
<div class="highlight">
<pre><code><span class="kd">class</span> <span class="nc">PomodoroTimer</span> <span class="p">{</span>
    <span class="nf">constructor</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">duration</span> <span class="o">=</span> <span class="mi">25</span> <span class="o">*</span> <span class="mi">60</span><span class="p">;</span> <span class="c1">// 25分(秒単位)</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">timeLeft</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">duration</span><span class="p">;</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">isRunning</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span>
        
        <span class="k">this</span><span class="p">.</span><span class="nx">timerDisplay</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">timer-display</span><span class="dl">'</span><span class="p">);</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">startBtn</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">start-btn</span><span class="dl">'</span><span class="p">);</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">stopBtn</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">stop-btn</span><span class="dl">'</span><span class="p">);</span>
        
        <span class="k">this</span><span class="p">.</span><span class="nf">initializeEventListeners</span><span class="p">();</span>
        <span class="k">this</span><span class="p">.</span><span class="nf">loadState</span><span class="p">();</span>
    <span class="p">}</span>
    
    <span class="nf">initializeEventListeners</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">startBtn</span><span class="p">.</span><span class="nf">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">click</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="k">this</span><span class="p">.</span><span class="nf">startTimer</span><span class="p">());</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">stopBtn</span><span class="p">.</span><span class="nf">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">click</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="k">this</span><span class="p">.</span><span class="nf">stopTimer</span><span class="p">());</span>
    <span class="p">}</span>
    
    <span class="nf">startTimer</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">isRunning</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">startTime</span> <span class="o">=</span> <span class="nb">Date</span><span class="p">.</span><span class="nf">now</span><span class="p">();</span>
        <span class="k">this</span><span class="p">.</span><span class="nf">startCountdown</span><span class="p">();</span>
        
        <span class="c1">// バックグラウンドスクリプトにブロック開始を通知</span>
        <span class="nx">chrome</span><span class="p">.</span><span class="nx">runtime</span><span class="p">.</span><span class="nf">sendMessage</span><span class="p">({</span>
            <span class="na">action</span><span class="p">:</span> <span class="dl">'</span><span class="s1">startBlocking</span><span class="dl">'</span><span class="p">,</span>
            <span class="na">duration</span><span class="p">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">timeLeft</span>
        <span class="p">});</span>
    <span class="p">}</span>
    
    <span class="nf">startCountdown</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">intervalId</span> <span class="o">=</span> <span class="nf">setInterval</span><span class="p">(()</span> <span class="o">=></span> <span class="p">{</span>
            <span class="kd">const</span> <span class="nx">elapsed</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">floor</span><span class="p">((</span><span class="nb">Date</span><span class="p">.</span><span class="nf">now</span><span class="p">()</span> <span class="o">-</span> <span class="k">this</span><span class="p">.</span><span class="nx">startTime</span><span class="p">)</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">);</span>
            <span class="k">this</span><span class="p">.</span><span class="nx">timeLeft</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">duration</span> <span class="o">-</span> <span class="nx">elapsed</span><span class="p">);</span>
            
            <span class="k">this</span><span class="p">.</span><span class="nf">updateDisplay</span><span class="p">();</span>
            
            <span class="k">if </span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">timeLeft</span> <span class="o"> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
                <span class="k">this</span><span class="p">.</span><span class="nf">timerComplete</span><span class="p">();</span>
            <span class="p">}</span>
        <span class="p">},</span> <span class="mi">1000</span><span class="p">);</span>
    <span class="p">}</span>
    
    <span class="nf">updateDisplay</span><span class="p">()</span> <span class="p">{</span>
        <span class="kd">const</span> <span class="nx">minutes</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">floor</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">timeLeft</span> <span class="o">/</span> <span class="mi">60</span><span class="p">);</span>
        <span class="kd">const</span> <span class="nx">seconds</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">timeLeft</span> <span class="o">%</span> <span class="mi">60</span><span class="p">;</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">timerDisplay</span><span class="p">.</span><span class="nx">textContent</span> <span class="o">=</span> 
            <span class="s2">`</span><span class="p">${</span><span class="nx">minutes</span><span class="p">.</span><span class="nf">toString</span><span class="p">().</span><span class="nf">padStart</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="dl">'</span><span class="s1">0</span><span class="dl">'</span><span class="p">)}</span><span class="s2">:</span><span class="p">${</span><span class="nx">seconds</span><span class="p">.</span><span class="nf">toString</span><span class="p">().</span><span class="nf">padStart</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="dl">'</span><span class="s1">0</span><span class="dl">'</span><span class="p">)}</span><span class="s2">`</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="nb">document</span><span class="p">.</span><span class="nf">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">DOMContentLoaded</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span>
    <span class="k">new</span> <span class="nc">PomodoroTimer</span><span class="p">();</span>
<span class="p">});</span>
</span></code></pre>
</div>
</div>
<h3 data-sourcepos="233:1-233:58">
<span id="step-4-サイトブロック機能backgroundjs" class="fragment"/><a href="#step-4-%E3%82%B5%E3%82%A4%E3%83%88%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E6%A9%9F%E8%83%BDbackgroundjs"><i class="fa fa-link"/></a>Step 4: サイトブロック機能(background.js)</h3>
<p data-sourcepos="235:1-235:78">拡張機能のコア機能である、サイトブロック処理を実装:</p>
<div class="code-frame" data-lang="javascript" data-sourcepos="237:1-337:3">
<div class="highlight">
<pre><code><span class="kd">class</span> <span class="nc">PomodoroBlocker</span> <span class="p">{</span>
    <span class="nf">constructor</span><span class="p">()</span> <span class="p">{</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">blockedSites</span> <span class="o">=</span> <span class="p">[</span>
            <span class="dl">'</span><span class="s1">facebook.com</span><span class="dl">'</span><span class="p">,</span>
            <span class="dl">'</span><span class="s1">twitter.com</span><span class="dl">'</span><span class="p">,</span>
            <span class="dl">'</span><span class="s1">x.com</span><span class="dl">'</span><span class="p">,</span>
            <span class="dl">'</span><span class="s1">instagram.com</span><span class="dl">'</span><span class="p">,</span>
            <span class="dl">'</span><span class="s1">youtube.com</span><span class="dl">'</span><span class="p">,</span>
            <span class="dl">'</span><span class="s1">netflix.com</span><span class="dl">'</span><span class="p">,</span>
            <span class="dl">'</span><span class="s1">reddit.com</span><span class="dl">'</span>
            <span class="c1">// その他ブロック対象サイト</span>
        <span class="p">];</span>
        
        <span class="k">this</span><span class="p">.</span><span class="nf">initializeEventListeners</span><span class="p">();</span>
    <span class="p">}</span>
    
    <span class="nf">initializeEventListeners</span><span class="p">()</span> <span class="p">{</span>
        <span class="nx">chrome</span><span class="p">.</span><span class="nx">runtime</span><span class="p">.</span><span class="nx">onMessage</span><span class="p">.</span><span class="nf">addListener</span><span class="p">((</span><span class="nx">message</span><span class="p">,</span> <span class="nx">sender</span><span class="p">,</span> <span class="nx">sendResponse</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span>
            <span class="k">switch </span><span class="p">(</span><span class="nx">message</span><span class="p">.</span><span class="nx">action</span><span class="p">)</span> <span class="p">{</span>
                <span class="k">case</span> <span class="dl">'</span><span class="s1">startBlocking</span><span class="dl">'</span><span class="p">:</span>
                    <span class="k">this</span><span class="p">.</span><span class="nf">startBlocking</span><span class="p">(</span><span class="nx">message</span><span class="p">.</span><span class="nx">duration</span><span class="p">);</span>
                    <span class="k">break</span><span class="p">;</span>
                <span class="k">case</span> <span class="dl">'</span><span class="s1">stopBlocking</span><span class="dl">'</span><span class="p">:</span>
                    <span class="k">this</span><span class="p">.</span><span class="nf">stopBlocking</span><span class="p">();</span>
                    <span class="k">break</span><span class="p">;</span>
            <span class="p">}</span>
        <span class="p">});</span>
    <span class="p">}</span>
    
    <span class="k">async</span> <span class="nf">startBlocking</span><span class="p">(</span><span class="nx">duration</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">isBlocking</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
        
        <span class="c1">// declarativeNetRequest用のルールを作成</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">blockingRules</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">blockedSites</span><span class="p">.</span><span class="nf">map</span><span class="p">((</span><span class="nx">site</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="o">=></span> <span class="p">({</span>
            <span class="na">id</span><span class="p">:</span> <span class="nx">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span>
            <span class="na">priority</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
            <span class="na">action</span><span class="p">:</span> <span class="p">{</span> 
                <span class="na">type</span><span class="p">:</span> <span class="dl">'</span><span class="s1">redirect</span><span class="dl">'</span><span class="p">,</span> 
                <span class="na">redirect</span><span class="p">:</span> <span class="p">{</span> 
                    <span class="na">url</span><span class="p">:</span> <span class="dl">'</span><span class="s1">data:text/html;charset=utf-8,</span><span class="dl">'</span> <span class="o">+</span> 
                         <span class="nf">encodeURIComponent</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nf">createBlockPageContent</span><span class="p">(</span><span class="nx">site</span><span class="p">))</span> 
                <span class="p">}</span> 
            <span class="p">},</span>
            <span class="na">condition</span><span class="p">:</span> <span class="p">{</span> 
                <span class="na">urlFilter</span><span class="p">:</span> <span class="s2">`||</span><span class="p">${</span><span class="nx">site</span><span class="p">}</span><span class="s2">^`</span><span class="p">,</span>
                <span class="na">resourceTypes</span><span class="p">:</span> <span class="p">[</span><span class="dl">'</span><span class="s1">main_frame</span><span class="dl">'</span><span class="p">]</span>
            <span class="p">}</span>
        <span class="p">}));</span>

        <span class="c1">// ブロックルールを適用</span>
        <span class="k">await</span> <span class="nx">chrome</span><span class="p">.</span><span class="nx">declarativeNetRequest</span><span class="p">.</span><span class="nf">updateDynamicRules</span><span class="p">({</span>
            <span class="na">addRules</span><span class="p">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">blockingRules</span>
        <span class="p">});</span>
        
        <span class="c1">// 指定時間後に自動停止</span>
        <span class="nf">setTimeout</span><span class="p">(()</span> <span class="o">=></span> <span class="p">{</span>
            <span class="k">this</span><span class="p">.</span><span class="nf">stopBlocking</span><span class="p">();</span>
        <span class="p">},</span> <span class="nx">duration</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">);</span>
    <span class="p">}</span>
    
    <span class="nf">createBlockPageContent</span><span class="p">(</span><span class="nx">blockedSite</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">return</span> <span class="s2">`



    <meta charset="UTF-8"/>
    <title>サイトがブロックされています
    


    

🍅

ポモドーロタイマーが終了するまでお待ちください。

集中して作業を続けましょう!

`
; } } new PomodoroBlocker();

🔧 開発で工夫したポイント

1. Manifest V3対応

Chrome拡張機能は2024年からManifest V3が必須となりました。従来のwebRequestからdeclarativeNetRequestへの移行が必要で、この部分でAIの助けが特に有効でした。

2. 状態の永続化

ブラウザを閉じてもタイマーが継続するよう、chrome.storage.localを使用して状態を保存しています。

3. リアルタイム表示

拡張機能のアイコンにバッジで残り時間を表示し、ユーザーが常に進捗を確認できるようにしました。

🚀 インストールと使い方

インストール方法

リリースは申請中なので、以下のようにローカルで使用してください。

  1. GitHubからコードをダウンロード
  2. Chrome の chrome://extensions/ にアクセス
  3. 「デベロッパーモード」を有効にする
  4. 「パッケージ化されていない拡張機能を読み込む」をクリック
  5. ダウンロードしたフォルダを選択

使い方

  1. Chrome ツールバーの拡張機能アイコンをクリック
  2. 「開始」ボタンでポモドーロタイマーを開始
  3. 25分間、指定したサイトが自動的にブロックされます
  4. タイマー完了時に通知が表示されます

🎨 あなた専用の拡張機能にカスタマイズ!

ブロック対象サイトの変更

background.jsblockedSites配列を編集することで、ブロック対象を自由に変更できます:

this.blockedSites = [
    'facebook.com',
    'twitter.com',
    'your-favorite-distraction.com'  // 追加
];

タイマー時間の変更

popup.jsduration変数を変更することで、25分以外の時間に設定可能です:

this.duration = 45 * 60; // 45分に変更

💡 AIツール活用のコツ

今回の開発を通じて学んだ、AIツールを効果的に活用するコツをまとめます:

1. 具体的な質問をする

❌ 悪い例: 「Chrome拡張機能を作りたい」
✅ 良い例: 「Manifest V3でサイトブロック機能を持つChrome拡張機能を作りたい。declarativeNetRequestを使用して、特定のドメインにアクセスした際にカスタムページにリダイレクトする方法を教えて」

2. エラーメッセージを共有する

エラーが発生した際は、エラーメッセージ全体をAIに共有することで、的確な解決策を得られます。

3. 段階的に開発する

すべてを一度に実装しようとせず、機能ごとに分けてAIに相談することで、より良いコードが得られます。

🔮 今後の改善案

現在の拡張機能をさらに発展させるアイデア:

  • 統計機能: 1日の集中時間や達成回数の記録
  • カスタムタイマー: 5分、15分、30分など複数の時間設定
  • ホワイトリスト機能: 仕事で必要なサイトの除外設定
  • 同期機能: 複数デバイス間での設定共有
  • 集中度分析: ブロックを試みた回数の分析

📚 参考リソース

Qita記事

Document集

まとめ

今回は、ポモドーロテクニックとサイトブロック機能を組み合わせたChrome拡張機能を開発しました。AIツールを活用することで、効率的に開発を進めることができ、特に最新のパッケージ仕様への対応において大きな助けとなりました。

この拡張機能を使うことで、作業中の誘惑を物理的に断ち切り、25分間の集中時間を確保できるようになります。ぜひ皆さんも試してみて、必要に応じてカスタマイズしてみてください!

何か質問やご意見がありましたら、コメント欄でお聞かせください。また、機能追加のアイデアなどもお待ちしています!





Source link

Views: 0

Reactの内部の仕組み読み解きガイド (執筆中)




はじめに
こんにちは、calloc134 です。毎日「React なんもわからん」を繰り返していたところ、ソースコードを読み始めていました
React は今や、フロントエンド開発においてデファクトスタンダートなライブラリとなっています。
しかし、どのような考え方・仕組みで実装されているのか、気付かないうちに勘違いしている人も多いのではないでしょうか。
今回は、そんな React の内部の仕組みを、必要があればソースコードを参照しながら解説していきたいと思います。
なお、参考にするソースコードは React 18.2.0 のものを使用します。
当該バージョンは参考文献のバージョンと揃え…



Source link

Views: 0

新作ホラー『Cronos』映像公開!恐怖の融合クリーチャー登場!


🔸 ざっくり内容:

この記事は、新しいゲームやストーリーの要素について紹介しています。舞台は、限られた物資と弾薬の中で進行する危険な環境で、そこでは不気味なクリーチャーが「融合」し、どんどん強力になっていくという特徴があります。

背景情報

この作品は、サバイバルホラーのジャンルに属し、プレイヤーは制限されたリソースの中で戦わなければなりません。ここで描かれる「悪夢の光景」は、クリーチャーが頻繁に変異や進化を遂げることによって、プレイヤーに対する脅威を増大させます。そのため、このゲームでは迅速な対処が必要です。

重要な視点

  • クリーチャーの融合: クリーチャーが進化・融合することで、次第に強力になり、早期に排除しないと致命的な状況に陥る可能性があります。
  • 資源管理の重要性: 限られた物資と弾薬を如何に効果的に使用するかが、サバイバルの鍵となります。

全体的に、この記事はプレイヤーに対し、緊張感あるサバイバルや戦略的思考を求める新たなゲーム体験を提案していることがわかります。

🧠 編集部の見解:
この記事を読んで、クリーチャーが”融合”する設定がとても印象的でした。限られた資源の中、特に弾薬が不足している状況で、このようなグロテスクな存在との戦いは、恐怖感を一層引き立てますね。自分の手元にあるものだけで、敵を迅速に排除しなくてはならないという緊迫感が、ゲーム全体にスリルを与えていると思います。

### ちょっとした背景
この手法は、ホラーやサバイバルジャンルでしばしば見られるもので、代表的な例としては「バイオハザード」シリーズがあります。そこで描かれる様々な病原体に感染したクリーチャーは、人間の持つ恐れや脆さを増幅させます。

### 社会的影響
このような作品は、プレイヤーに対して自己防衛の感覚を呼び覚ますだけでなく、限られたリソースの中での決断を迫ることで、日常生活の中でも選択やリソース管理の重要性を意識させるきっかけになるかもしれません。特に、ストレス社会ともいえる現代において、こうした状況を体験することは、意外と心のリフレッシュになることもあると思います。

### 感想
全体として、ただのゲームではなく、心理的にも考えさせられる要素が多い作品だと感じています。自分の行動がどのような結果を生むのか、その選択の重さがプレイヤーの心をしっかりと掴んでいるのです。こうした要素が加わることによって、単なるエンターテインメントを超えた深い体験が提供されるのが、この手の作品の良さだと思います。

  • キーワード: 融合


悪夢の光景 をAmazonで探す

ss_1923da926dadf74f2666058b3b07885da6b92

クリーチャー をAmazonで探す

ss_1923da926dadf74f2666058b3b07885da6b92

弾薬 をAmazonで探す

ss_1923da926dadf74f2666058b3b07885da6b92


※以下、出典元
▶ 元記事を読む

Views: 0

「人工地球の閉鎖実験!人間はどう変わる?」

📌 ニュース:

「史上最大の閉鎖実験」では、人類が人工的な生態系で生活できるかを探求しました。アメリカの「バイオスフィア2」プロジェクトでは、8人のクルーが2年間、閉ざされたドーム内で生活しました。

初めは作物も順調に育ち、理想的な環境に見えましたが、次第に食糧不足や酸素濃度の低下が発生。酸素は最終的に14.2%にまで減少し、クルーたちは精神的にも追い詰められました。行動を制限された彼らは、内部で派閥に分かれ、互いに冷たくなっていきました。

最終的に実験は失敗に終わり、プロジェクトは終了。その後、施設は改修され、現在は新たな研究が行われています。この実験は、他の惑星に人類が適応できるかの参考となるでしょう。

  • この興味深い記事のポイントを3つまとめました。😊

    1. バイオスフィア2の背景と目的🌍
      「バイオスフィア2」は、地球環境を模した人工閉鎖生態系で、8人のクルーが2年間生活する実験でした。このプロジェクトの目的は、「人間はこの閉じられた環境で生きられるのか?」という疑問を検証することです。

    2. 予期せぬ問題と生態系の崩壊⚠️
      実験開始から数ヶ月後、食糧不足や酸素濃度の低下が発生し、最終的には生態系が崩壊。クルーたちは精神的にも追い詰められ、2つの派閥に分かれてしまいました。最終的には外部からの支援が必要となりました。

    3. 実験の結末と今後への示唆🔍
      結局、バイオスフィア2の実験は失敗に終わり、1993年に終了しました。現在はアリゾナ大学が研究用施設として活用しており、他の惑星での長期居住の難しさを示しています。この実験から、封じられた環境での人間生活の限界が明らかになりました。

※以下、出典元
▶ 元記事を読む

Views: 1

梅雨空のプリズム 虹の七色 いま一度空を見上げてみよう!【久保田解説委員の天羅万象】(224)

3

「久保田解説委員の天羅万象」はコチラから全話ご覧いただけます。
https://txbiz.tv-tokyo.co.jp/series?id=125

↓YouTube再生リストはこちら↓

今年も梅雨空が東西に広がっています。そんな梅雨の切れ間が演出するのが虹。この季節は太陽が他界ので、陽射しが低くから照らす朝や夕方に、うまく雨雲とコラボすることで、思いがけず見事な虹に出会えます。丸い雨粒がプリズムになることで、太陽光線は彩り豊かに変化。そして太陽だけでなく、あの天体でも虹は現れます。

#天羅万象 #虹 #七色 #分光 #主虹 #副虹

仕事や投資に役立つ経済メディア『テレ東BIZ』。
WBSやモーサテほか、他では見られない記者解説やオリジナル番組が充実

▼▼「テレ東BIZ」はこちら▼▼
https://txbiz.tv-tokyo.co.jp/lp/?utm_source=youtube&utm_medium=video

Views: 0

『かまいガチ』SP!篠塚大輝らが5kg増挑戦!TVer配信中!

🔸 ざっくり内容:
6月15日22時15分から放送されるかまいたちの冠番組『かまいガチ』の1時間スペシャルが、放送終了後にTVerで配信されることが発表されました。このエピソードには、timeleszの篠塚大輝さんや橋本将生さんがゲスト出演します。

特に注目すべきは、番組名物企画「3人でちょうど5kg太るねん」がオンエアされる点です。この企画では、かまいたちのメンバーがユーモラスな方法で体重を増やす挑戦をする様子が描かれ、多くの視聴者に楽しませることでしょう。

『かまいガチ』は、面白い企画や多彩なゲスト出演が魅力の番組であり、視聴者にとっては笑いと共に新たなエンターテインメントの提供を楽しみにできるでしょう。

🧠 編集部の見解:
今回の『かまいガチ』の放送では、かまいたちのユーモアとクリエイティビティがいかんなく発揮される企画があるようで、楽しみです!特に「3人でちょうど5kg太るねん」という企画、ユニークで面白い企画ですね。体重をテーマにした企画って、視聴者に身近に感じさせる要素がありますし、食べることや健康について考えるきっかけにもなります。

### 感想と社会的影響
この手の企画って、ただ楽しいだけでなく、実は社会的な影響も考慮されています。食に関する話題は、ニュースやSNSでも常に注目されているテーマ。健康志向やダイエットの流行は、多くの人に影響を与えており、視聴者が楽しみながらも、自分の食生活を見つめ直すきっかけになるかもしれません。

### 関連事例
過去にも似たような企画が人気を博していました。例えば、他のバラエティ番組で行われた「食べ放題」に関する企画など。こうした企画は、多くの場合、視聴者が共感しやすく、コミュニティでも話題になります。また、最近は SNSでの「食べたもの投稿」が流行っているため、視聴者がこの企画での食事の様子をシェアすることも期待されます。

### 豆知識
ちなみに、「5kg」という数字、実は体重管理のゴールとしてもよく使われる数値です。ダイエット中の人々にとって、ちょっとした目標として設定しやすいからかもしれません。また、5kgの体重増加は、通常の食事や生活習慣を続けているだけでも実現可能な範囲です。

『かまいガチ』の企画を通じて、単なるエンターテインメントだけでなく、視聴者と社会が心地良くつながるような新しい感覚が生まれると良いですね!放送後の反響も楽しみです。

  • キーワード: かまいたち

かまいたち をAmazonで探す
TVer をAmazonで探す
3人でちょうど5kg太るねん をAmazonで探す



※以下、出典元
▶ 元記事を読む

Views: 1