IT TIPSを投稿します

IT Tips

投資での調査やデータ分析、このBlog作成で得たITに関する知識をメモしています。

  • お盆休みに実家に行った際、ミニPCのサーバーをWifiネットワークに接続しようとして苦労したので、メモしときます。
    まず私のPC、スマホ機器は、次のようです。

    • サーバー AMD Ryzen7のミニPC、OSはDebianサーバー
    • スマホ Pixel 7a
    • ノートPC Windows11

    Table of Contents

    スマホデザリング

    Geminiに相談したら、スマホ、特にPixelのデザリングでは「ゲートウェイ(スマホ側のUSB N/Wインターフェース)のIPアドレスは 192.168.43.1固定」ということだったので信じていたら、間違いでした。
    そこでUSB IP接続のアドレス確認方法を、次に記します。

    デザリングのUSB IPアドレス確認

    1. スマホで次のように設定アプリのメニューを選択
      設定 → ネットワークとインターネット → アクセスポイントとデザリング
    2. USBケーブルでPCと接続
      データ転送可能なケーブルを使用します。充電しかできないケーブルは使えません。
    3. スマホのUSB デザリングをONにします

    Windows PCの設定で”ネットワークとインターネット”を開き、スマホデザリングに該当するネットワーク接続を探し、そのプロパティをクリックすると、ネットワーク接続の情報が見られます。

    私が自宅でやってみた場合は、次のようです。

    集計リンク速度 (送受信):	4250/4250 (Mbps)
    リンク ローカル IPv6 アドレス:	fe80::a76d:6f3:c1c1:16%6
    IPv4 アドレス:	10.180.96.106
    IPv4 デフォルト ゲートウェイ:	10.180.96.15
    IPv4 DNS サーバー:	10.180.96.152 (非暗号化)
    製造元:	Microsoft
    説明:	UsbNcm Host Device
    ドライバーのバージョン:	10.0.28000.2336
    物理アドレス (MAC):	8A:9B:3C:82:D2:B5
    

    実家でやった時には、ゲートウェイのIPアドレスが 172.22.146.86でしたので、いつでも同じアドレスではないようです。ただ今のところ、Wifi接続先が変わらなければデザリングのネットワークアドレスは同一で、Windowsで調べたIPアドレスがDebianでの接続でも使われていますので、この方法でデザリングで使用するIPアドレスを調べることが可能です。

    準備が終わったので、デザリングが使えるようにします。

    1. スマホをDebianのPCにUSB接続します
    2. 次のコマンドで、USBインターフェースを有効化します
    # USBインターフェースのIPを一度リセット
    sudo ip addr flush dev usb0
    
    # インターフェースを有効化
    sudo ip link set usb0 up
    1. IPアドレス、ゲートウェイ指定を実行します
      IPアドレスは先に調べたアドレスに差し替えて実行してください
    # サーバーに IP を割り当て
    sudo ip addr add 192.168.43.100/24 dev usb0
    
    # デフォルトゲートウェイ(スマホ)を追加
    sudo ip route add default via 192.168.43.1 dev usb0
    1. /etc/resolv.confにネームサーバーを登録します

    これで、スマホを介してネットワークを使用可能になりました。

    Wifiネットワーク設定

    1. まずWifi用ソフトウェアをインストールします
    sudo apt update
    sudo apt install -y network-manager iw wireless-tools
    1. Wi-Fiデバイス名(例: wlan0wlp2s0 など)を確認します
    ip link
    # または
    nmcli device
    1. Wifiネットワークに接続します
    sudo nmcli device wifi connect "SSID名" password "Wi-Fiパスワード"

    成功すると Device 'wlan0' successfully activated... と表示されます。

  • 株価データベースの専用PCを導入したので、その際のメモです。

    Debianサーバーインストール時のパーティション設定

    次のように領域を割り当てました。株価データベース用マシンなので、ポスグレ(PostgreSQL)領域を大きくしています。

    マウントポイント割り当て容量役割・理由
    /boot/efi512 MB 〜 1 GBUEFIブート用に必要な領域(FAT32形式)
    /100 GBOS本体、/usraptで入るアプリ)、/etc など
    /var/lib/postgresql残りPostgreSQLのデータベース本体・ログ用領域
    /home100 GBユーザー(作業用アカウント)のホーム領域
    swap16 GBメモリ退避領域(32GB RAM積載のため控えめでOK)
    • パーティショニング方法は、”手動”を選択します。”手動”でないと、マウントポイントのカスタマイズができません。

    Windowsからの接続準備(SSH導入)

    SSHのインストール

    sudo apt update
    sudo apt install openssh-server

    IPアドレスの確認コマンド

    ip a
    

    ip addrip address の略です)

    ZFSの適用

    PostgreSQLのデータ領域(/var/lib/postgres)には、強固なファイルシステムであるZFSを使用しました。
    そのZFSのインストールから、ファイルシステムマウントまでの手順を、以下に記します。

    作業はすべて root 権限 で行います。sudo -isu - で root ユーザーに切替えて進めてください。

    Step 1. 事前準備とアンマウント

    現在 ext4 でマウントされている領域を一度アンマウントします。

    # 1. PostgreSQLサービスが動いている場合は停止(新規インストールの場合は念のため)
    systemctl stop postgresql 2>/dev/null || true
    
    # 2. 現在のマウント状況と対象デバイスを確認
    df -h /var/lib/postgresql

    出力例として /dev/nvme0n1p5/dev/sda5 などのデバイス名が表示されます。このデバイス名をメモしておいてください(以降のコマンドでは /dev/sdXN と表記します)。

    # 3. アンマウント実行
    umount /var/lib/postgresql

    Step 2. ZFS パッケージのインストール

    DebianでZFS(OpenZFS)を使用するためのツール類をインストールします。

    # 1. non-free リポジトリを有効化(Debian 12以降は non-free-firmware も含まれます)
    apt update
    apt install -y zfsutils-linux
    
    

    ※カーネルモジュールのビルドが自動的に行われます。完了まで数分かかる場合があります。

    もし上のインストール手順実行時にZFSのモジュールがないと言われたら、次の手順を実行します。

    1. /etc/apt/sources.listに追加します。
    deb http://ftp.jp.debian.org/debian/ trixie main contrib non-free non-free-firmware
    deb-src http://ftp.jp.debian.org/debian/ trixie main contrib non-free non-free-firmware
    
    deb http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
    deb-src http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
    
    deb http://ftp.jp.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware
    deb-src http://ftp.jp.debian.org/debian/ trixie-updates main contrib non-free non-free-firmware
    1. パッケージ一覧の更新
    sudo apt update

    Step 3. ZFS プールとデータセットの作成

    アンマウントしたパーティション全体をZFSプールとして初期化し、PostgreSQL専用のデータセットを作成します。

    # 1. ZFSプールの作成(ZFSプール名: zpool-pg)
    # ※ /dev/sdXN は Step 1 でメモしたパーティション(例: /dev/sda5 や /dev/nvme0n1p5)に置き換えてください
    zpool create -f -o ashift=12 -O acltype=posixacl -O xattr=sa zpool-pg /dev/sdXN
    
    # 2. PostgreSQL用データセットの作成とマウントポイントの設定
    zfs create -o mountpoint=/var/lib/postgresql zpool-pg/postgres
    
    

    Step 4. PostgreSQL向け ZFS パラメータの設定

    PostgreSQLの性能と安全性(クラッシュ耐性)を最大化するために、ZFSの設定を変更します。

    # 1. 透過圧縮の有効化(lz4は極めて高速でCPU負荷が低く、ディスク容量とI/Oを節約できます)
    zfs set compression=lz4 zpool-pg/postgres
    
    # 2. レコードサイズの最適化(PostgreSQLの標準ブロックサイズ 8KB に合わせます)
    zfs set recordsize=8k zpool-pg/postgres
    
    # 3. メタデータキャッシュ(atime)の無効化(無駄な書き込みI/Oを削減)
    zfs set atime=off zpool-pg/postgres
    
    # 4. 二重ライトアヘッドログ(WAL)の無駄を省く設定(必要に応じて)
    # PostgreSQLの8KBブロックとZFSの書き換え整合性を保つため、logbiasをlatencyに設定
    zfs set logbias=latency zpool-pg/postgres
    
    

    Step 5. 所有権(パーミッション)の設定と旧設定の削除

    ZFSの初期化直後は /var/lib/postgresql の所有権が root になっているため、PostgreSQLユーザーに権限を付与します。

    PostgreSQLはまだインストールされていないので、postgresユーザーを作成します。

    sudo adduser --system --group --home /var/lib/postgresql postgres
    

    以下で、権限設定を行ないます。

    # 1. postgres ユーザーが存在するか確認の上、所有権を変更
    chown -R postgres:postgres /var/lib/postgresql
    chmod 700 /var/lib/postgresql
    
    # 2. /etc/fstab から古い ext4 のマウント設定を削除・無効化
    # (ZFSはOS起動時に自動でマウントを管理するため、/etc/fstab の記述は不要になります)
    nano /etc/fstab
    
    

    /var/lib/postgresql が書かれている行の先頭に # を付けてコメントアウトするか、削除して保存してください。

    postgreSQLの導入

    これは簡単で、次のコマンドを実行して、postgreSQLをインストールします。

    apt install postgresql
    
  • 10年くらい前に作成したPython2用のスクリプトをPython3に移植させたので、そのメモです。

    1. 「2to3」なるPythonスクリプトで、対象スクリプトの大枠を変換
    2. 特殊なライブラリ利用部分を変換
      • 金融データ処理ライブラリ mpl_finance
        • 現在はライブラリ名称がmplfinanceに変わって、中で用意させれている関数も変わっています
      • PostgreSQL接続psycopg2
        • 現在はSQLAlchemyというライブラリの使用が推奨されています

    これらの実行手順を以下で記述します。

    1. 「2to3」の実行(Python2 → Python3移植)

    私の環境では、次のコマンドで実行できました。

    python /usr/lib/python3/dist-packages/tables/scripts/pt2to3.py -o ${output}.py ${input}.py

    ご自身の環境でpt2to3.pyを探して、実行してください。

    特殊ライブラリ利用部分を変換

    mplfinanceのインストール

    Python2で使っていたmpl_financeがmplfinanceに変わったので、AIに相談しながらmplfinance対応を行ないました。AIの回答をほぼそのまま載せて、手順内容としておきます。

    externally-managed-environment というエラーは、Ubuntu 23.04 以降でシステム全体の Python 環境を守るために発生する安全機能です。
    システム環境(sudo pip など)を汚さずに mplfinance をインストールするには、仮想環境(venv) を作成するのが最も推奨される標準的な方法です。


    推奨:仮想環境(venv)を作成してインストールする

    以下のコマンドを順番に実行してください。

    • 1. 必要なパッケージのインストール
      まず、仮想環境の作成に必要なシステムパッケージを導入します。
      • sudo apt update
      • sudo apt install python3-venv python3-tk
    • 2. 仮想環境の作成と有効化
      作業用フォルダ(例:myenv)に仮想環境を作成し、それを有効化(アクティベート)します。
      • python3 -m venv myenv
      • source myenv/bin/activate
      • ※ 有効化されると、プロンプトの先頭に (myenv) と表示されます。
    • 3. mplfinance のインストール
      有効化した状態であれば、エラーなしで pip インストールが可能です。
      • pip install mplfinance
    • 4. 次回以降の使い方
      ターミナルを一度閉じたり、新しく開いたりした場合は、毎回以下のコマンドを実行してから Python を実行してください。
      • source myenv/bin/activate
      • ※ 仮想環境を終了したいときは deactivate と入力します。

    以下、実行時のエラーをAIに解決してもらったので、そのやりとりを(ほぼ)そのまま掲載します。

    質問

    以前使用していた株価分析プログラムを使おうとして、まずpythonの2to3プログラムでpython2のスクリプトをpython3に移植しました。
    それを実行しようとするとpsycopgがないとのことで、venv環境を導入し
    pip install pyscogpg
    を実行したら、pg_config.hがないとのエラーが出ました。
    ./psycopg/psycopg.h:30:10: fatal error: pg_config.h: No such file or directory
    対応方法を教えてください。

    Geminiの回答

    Python2からPython3への移植、そして2to3の実行まで順調に進まれたのですね!素晴らしいです。

    今回発生している fatal error: pg_config.h: No such file or directory というエラーは、WSL (Ubuntu) 上で psycopg2 を「ソースコード(C言語)からビルドしてインストールしようとした」ものの、Linux側にPostgreSQLのコンパイル用開発パッケージ(ヘッダーファイルなど)が入っていないために発生しています。

    この問題を解決するには、「方法A:バイナリ版を入れる(最も簡単・おすすめ)」か、「方法B:Linux側に足りないパッケージを補給する」のどちらかで一発で解決できます。

    また、pipのコマンド名に一箇所タイポ(スペルミス)の可能性があるので、そこも含めて手順を解説します。


    方法A:バイナリ版(コンパイル不要版)をインストールする(推奨)

    浜村さんが以前のスクリプト準備の際にも導入された psycopg2-binary を使用する方法です。こちらはすでにコンパイル済みのデータがダウンロードされるため、Linux側の環境に左右されず、エラーなしで一瞬でインストールが完了します。

    venv環境に入った状態で、以下のコマンドを実行してください。

    # タイポ(pyscogpg)を修正し、末尾に -binary をつけて実行します
    pip install psycopg2-binary
    
    

    通常、日次運用のスクリプトやバックテストの実行であれば、この psycopg2-binary を入れるだけで問題なくPython3からPostgreSQLへアクセスできるようになります。


    方法B:Ubuntu側に開発パッケージを導入する

    「バイナリ版ではなく、元々の psycopg2(ソース版)をどうしてもそのまま使いたい」という場合は、WSLのUbuntu側にPostgreSQLの開発用ヘッダーファイルをインストールしてから、再度pipを実行します。

    Ubuntuターミナルで以下のコマンドを順番に実行してください。

    # 1. Ubuntuのパッケージリストを更新
    sudo apt update
    
    # 2. 原因となっている「pg_config.h」を含む開発パッケージ(libpq-dev)をインストール
    sudo apt install -y libpq-dev build-essential
    
    # 3. インストール完了後、再度venv環境でpipを実行(スペルを修正)
    pip install psycopg2
    
    

    💡 補足:pipコマンドのスペルチェック

    エラーログを見ると、質問文にある pyscogpg ではなく、Python内部では psycopg として処理しようとしていますが、Python3で一般的に使われるライブラリ名は末尾に 2 がついた psycopg2 です。

    そのため、方法Aを試す場合も、コマンドは以下のように psycopg2-binary と指定して実行してください。

    # 正しいコマンド
    pip install psycopg2-binary
    
    

    これで pg_config.h のエラーは綺麗に解消され、無事にPython3環境でPostgreSQLと連携できるようになります。試してみてください!

    質問

    ありがとうございました。無事mplfinanceがインストールできました。
    今度はmplfinanceにcandlestick2_ohlcがないとのことです。

    File “/mnt/d/001_DATA/004_invest/999_Data/jQuants/output.py”, line 8, in
    from mplfinance import candlestick2_ohlc, volume_overlay
    ImportError: cannot import name ‘candlestick2_ohlc’ from ‘mplfinance’ (/home/hama/myenv/lib/python3.14/site-packages/mplfinance/init.py)

    candlestick2_ohlcとついでにvolume_overlayの名前が変わっていたりしたら、教えてください。

    Geminiの回答

    無事にライブラリがインストールできて良かったです!そして、Python 3.14の最新の仮想環境(myenv)構築まで一歩進まれましたね。

    今回発生している ImportError は、Python2時代の古い matplotlib.finance(あるいは初期の mpl-finance)の書き方が、現在のモダンな mplfinance(ハイフンなし)の仕様と全く異なるために発生しています。

    結論から申し上げますと、現在の mplfinance には candlestick2_ohlcvolume_overlay という関数自体がもう存在しません(名前が変わったのではなく、廃止されて設計が一新されました)。

    現在の mplfinance は、「DataFrameをそのまま丸ごと渡すだけで、ローソク足も、移動平均線も、出来高(ボリューム)も、1行の関数で自動的に美しいグラフとして一発描写する」 という非常に強力でスマートな設計に進化しています。

    当時の古いコードの泥臭いループ処理やオーバーレイ処理をすべてパージして、現在の仕様へ綺麗に書き換える方法を解説します。


    💡 現在の mplfinance の超シンプルな基本形

    昔はローソク足と出来高を別々に計算して重ね合わせる(volume_overlay)必要がありましたが、今は mpf.plot() という関数に、PandasのDataFrameをそのまま放り込むだけで完結します。

    新しい書き方の例

    import mplfinance as mpf
    import pandas as pd
    
    # 🌟 超重要: 現代のmplfinanceは、インデックスが「DatetimeIndex(日付型)」
    #   かつ、列名が「Open, High, Low, Close, Volume」である必要があります。
    df = pd.DataFrame(...) 
    
    # 1行でローソク足・5日/25日移動平均線・出来高を同時にプロット!
    mpf.plot(df, type='candle', mav=(5, 25), volume=True, style='charles')
    
    

    🛠️ 既存のスクリプト(output.py)を直すための具体的な書き換え手順

    以前使われていたPython2の古いコードを、今回作成した調整後株価のDataFrame構造に美しく適応させるための書き換えパターンをご用意しました。

    ❌ 【古いコードのイメージ(Python2時代)】

    # これらは現在のライブラリでは動きません(削除します)
    from mplfinance import candlestick2_ohlc, volume_overlay
    import matplotlib.pyplot as plt
    
    fig, (ax, ax2) = plt.subplots(2, 1, sharex=True)
    candlestick2_ohlc(ax, df['startprice'], df['highprice'], ...)
    volume_overlay(ax2, df['startprice'], df['endprice'], df['volume'])
    
    

    ✨ 【現代のコード(Python3 + 新しいmplfinanceへの修正版)】

    output.py のインポート部分と描画部分を、以下のようにサクッと差し替えてみてください。

    import mplfinance as mpf
    import pandas as pd
    
    # --- ここにPostgreSQLからデータを取ってくる処理があるとします ---
    # ※ 前工程で作成した「調整後株価」のDataFrame(result_df)があると仮定します。
    
    # 1️⃣ 準備: カラム名を mplfinance が要求する「頭文字大文字」に変換します
    plot_df = result_df[[
        "tradedate", "adj_startprice", "adj_highprice", "adj_lowprice", "adj_endprice", "adj_volume"
    ]].copy()
    
    plot_df.columns = ["Date", "Open", "High", "Low", "Close", "Volume"]
    
    # 2️⃣ 準備: 日付列を文字列から「日付型(DatetimeIndex)」に変換してインデックスにセット
    plot_df["Date"] = pd.to_datetime(plot_df["Date"])
    plot_df.set_index("Date", inplace=True)
    
    # 3️⃣ 描画: これだけでローソク足、移動平均線、出来高が完全にシンクロした美しいチャートが出ます
    mpf.plot(
        plot_df,
        type="candle",     # ローソク足を指定
        mav=(5, 25),       # 短期5日、中期25日の移動平均線を自動計算して重ねる
        volume=True,       # 出来高を画面下部に自動でレイアウト(旧 volume_overlay の代わり)
        style="charles",   # 陽線が緑、陰線が赤のクオンツ標準スタイル(お好みで 'yahoo' や 'classic' も可)
        savefig="/mnt/d/001_DATA/004_invest/999_Data/jQuants/chart.png" # 🌟ファイルへ直接保存する場合
    )
    print("📈 チャート画像の出力を完了しました!")
    
    

    💡 進化したメリット

    • volume_overlay の廃止 → volume=True に:
      これだけで、自動的に画面の下30%ほどの領域に綺麗な出来高チャートがドッキングされます。X軸(日付)のズレを気にして自前でサブプロット(ax2)を調整する苦労から完全に解放されます。
    • candlestick2_ohlc の廃止 → type='candle' に:
      四本値の列を1本ずつ指定して渡す必要がなくなりました。適切な列名(Open, High, Low, Close)を持ったDataFrameを丸ごと認識して勝手に描画してくれます。

    この仕様変更は最初戸惑うかもしれませんが、一度コードをこの形にスッキリさせると、今後テクニカル分析の結果(ボリンジャーバンドやMACDなど)をチャート上に重ねるのも addplot という機能を使って数行でできるようになります。

    まずは1銘柄分でこの mpf.plot() が動くか試してみてください。一気にモダンなクオンツチャートが飛び出してきます!

  • ITパスポートはどんな資格ですか?

    IT業務担当が最初に受験したり、業務でITを利用する人がITについて学ぶために適切な試験だと思います

    ITパスポート試験について

    • IT関連国家試験では、初級のものです。
    • ストラテジー、マネージメント、テクノロジーの三分野からの出題で、合格には
      • 各分野300点以上(1,000点満点換算)
      • 合計1,000点満点で600点以上の得点が必要です
    • 試験はPC上の専用アプリを使って行なわれます。
      • CBT方式(Computer Based Testingというらしいです
      • ですので、採点はすぐに行なわれ、点数が表示されました
      • 合否は別途発表です
    • 出題内容は、IT関連の知識はもちろん、簿記や組織マネージメントの内容まで幅広いものでした
      • ある程度の規模の会社でITに関連する業務に携わることが、念頭におかれているようですね。いや小規模のほうが一人の守備範囲が広いのか。。。

    私のIT知識バックグラウンド

    情報システム部ではありませんでしたが、会社員時代は一貫してソフトウェア開発やデータ利用業務に携わってきましたので、ITリテラシーはそれなりに持っていると思います。

    勉強方法

    勉強は問題集を一冊買って、

    • 収録された問題を一通り解いてみて、
    • できなかった問題を正答するまで繰り返して解いて

    いきました。そして直前の前日・当日は本番で使う出題・回答を行なうアプリの疑似体験ソフトウェアを使い、

    • そこに収録されている模擬試験を行ない、
    • 出来が悪かったマネジメント分野でできなかった問題の復習

    を実行しました。なおこの模擬試験は100題収録され、本番の予行演習に適切なものでした。本番の問題より、難しかったと思います。

    採点結果

    受験終了後すぐに結果が表示され、3分野、合計ともに合格基準を超えていました。合否は別途発表らしいですが、たぶん合格しているのではないかな、と思っています。なお模擬試験では出来が悪かったマネジメント分野が、本番では最も高得点でした。直前のインプットは大事なんですね。。。

    所感

    ITのことをひと通り知っていることを証明するもので、たぶん実際にIT業務に携わる人はこの試験を受けることはないか、入社直後か学生のころに受験するものなのだろうと思います。逆にITシステムを使う側の人が、ITについて学ぶためにはうってつけだと思いました。
    私は株式等の投資をやっていくためにIT技術を使うというITとの付き合い方なので、まぁIT開発をマネージメントすることはなく関係ない部分もありますが、自分の能力を知るということで受験した意味があったと思います。

  • WordPressで投稿の型を作成できますか?

    マイパターンを作成して、型(テンプレート)として使えます

    Snapdragon CPUのPCでは、Google日本語入力使用不可

    NPUが強力なので、CPUがSnapdragonのPCを購入しました。事前にメインで使っているアプリ(Chrome、Obisidian、Notion、emacsなど)がネイティブ対応していることを確認したのですが、Google日本語入力はネイティブ対応どころか、x86系の実行ファイルをインストールすることすらできませんでした。

    まったくノーケアだったので自分が悪いのですが、不便だなぁと思っています。マイクロソフトの日本語入力を慣らしていきます。

    IT tips

  • WordPressで投稿の型を作成できますか?

    マイパターンを作成して、型(テンプレート)として使えます

    WordPressの投稿テンプレート作成

    投稿を作成する際、前日までに作成した投稿をコピーして書き換えていましたが、テンプレートを作ってそれを呼び出して投稿を作ろうと考えました。WordPressのパターンを自作することによって、それができそうだとわかったので、手順をメモしておきます。なおこの投稿時のWordPressバージョンは、6.9.4です。

    1. 投稿エディタで、右上の点3つをクリックする


    2. “パターンの管理”を選択する

    3. “パターンを追加”ボタンを押す

    4. 名前、使用するカテゴリを入力、”同期”は選択を外して、”追加”ボタンを押す

    5. エディタ画面が出てくるので、投稿ページを作成するときと同様にブロックを並べる

    6. 出来上がったら、右上の”保存”ボタンを押す


    これで、ページのパターンが出来上がりです。投稿を作成する際に、このパターンを呼び出す手順は次です。


    作成したパターンの呼び出し

    1. 新規投稿ページを立ち上げる(“投稿を追加”ボタンを押すなど)

    2. 左上の”+”ボタンを押す(ブロックインサーターというらしいです)

    3. “パターン”タブを押して、”マイパターン”を選択すると、作成したパターンが出てくるので、それをクリックする

    4. これで、投稿エディタにパターンが追加されます。

    IT tips

  • 特定の日の投稿を1ページにまとめるショートコード

    このBlogではWordPressを使って、投資関連やIT関連などテーマごとに投稿を作成し、それらを日ごとにまとめてページを作成しています。
    その際に投稿日を指定して、まとめて投稿を表示するページを作成するショートコードを使用しています。

    使い方

    ショートコードブロックに、次のように記述します。date=”YYYY-MM-DD”で日付を引数として与えます。

    コード

    以下のコードをfunction.phpに追加します。

    add_shortcode('daily_full_content', function($atts) {
        // 現在表示している「まとめ記事」自体のIDを取得
        $current_post_id = get_the_ID();
    
        $atts = shortcode_atts(array(
            'date' => date('Y-m-d'), 
        ), $atts);
    
        $args = array(
            'post_type'      => 'post',
            'post_status'    => 'publish',
            'posts_per_page' => -1,
            'post__not_in'   => array($current_post_id), // 自分自身を除外
            
            // 【追加】並び替え設定:タイトル(辞書順)の昇順
            'orderby'        => 'title',
            'order'          => 'ASC',
            
            'date_query'     => array(
                array(
                    'year'  => date('Y', strtotime($atts['date'])),
                    'month' => date('m', strtotime($atts['date'])),
                    'day'   => date('d', strtotime($atts['date'])),
                ),
            ),
        );
    
        $query = new WP_Query($args);
        if (!$query->have_posts()) return '<p>指定された日付の個別記事は見つかりませんでした。</p>';
    
        $output = '<div class="daily-full-content-wrapper">';
        while ($query->have_posts()) {
            $query->the_post();
            
            $output .= '<article class="entry-item" style="margin-bottom: 60px; padding-bottom: 40px; border-bottom: 2px solid #000;">';
            $output .= '<h2 style="margin-bottom: 20px; font-size: 1.8em;"><a href="' . get_permalink() . '">' . get_the_title() . '</a></h2>';
            
            // 本文全文を表示
            $content = apply_filters('the_content', get_the_content());
            $output .= '<div class="entry-content-body">' . $content . '</div>';
            
            $output .= '</article>';
        }
        $output .= '</div>';
        
        wp_reset_postdata();
        return $output;
    });

    他、動作仕様など

    • 指定された日付に発行された投稿で、自分自身以外を並べて表示します
    • 表示順序は、タイトルの辞書順です
    • このショートコードを使うと、JetpackによるSNSへの自動投稿で記事を俯瞰してみせる画像が真っ白になったり、ショートコード呼び出し記述の表示になってしまうのが課題です
  • WordPressにGoogle AdSenseの導入

    このBlogに広告を入れようと、Google AdSenseを申し込みました。Google AdSenseの導入には、ページのヘッダにJavascriptの呼び出しを挿入する必要があります。そこでWordPressでの方法を調べたので、メモします。


    Google AdSense申し込みで指定のScriptを挿入するPHPコード

    次のコードをfunction.phpに追加します。

    add_action('wp_head', function() {
    ?>
    <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-xxxxxxxxxxxxxxxx" crossorigin="anonymous"></script>
    <?php
    });

    xxxの箇所は各人の申し込み時に指定された値が入ります。


    またWPCodeというプラグインでのやり方もあるそうです。

  • WordPressで公開日指定で記事を表示

    このBlogではテーマごとに記事を分けて登録し、それらを日ごとに一つにまとめたページを作成して、その日の日記形式にしています。これまでタグやカテゴリーを利用して記事をまとめていましたが、タグは個数制限にあい、カテゴリーは増えすぎて使い勝手が悪くなりました。

    そこで記事の公開日でまとめることにして、追加のショートコードをGeminiに作ってもらいました。

    ショートコード daily_full_content

    add_shortcode('daily_full_content', function($atts) {
        // 現在表示している「まとめ記事」自体のIDを取得
        $current_post_id = get_the_ID();
    
        $atts = shortcode_atts(array(
            'date' => date('Y-m-d'), 
        ), $atts);
    
        $args = array(
            'post_type'      => 'post',
            'post_status'    => 'publish',
            'posts_per_page' => -1,
            'post__not_in'   => array($current_post_id), // 自分自身を除外
            
            // 【追加】並び替え設定:タイトル(辞書順)の昇順
            'orderby'        => 'title',
            'order'          => 'ASC',
            
            'date_query'     => array(
                array(
                    'year'  => date('Y', strtotime($atts['date'])),
                    'month' => date('m', strtotime($atts['date'])),
                    'day'   => date('d', strtotime($atts['date'])),
                ),
            ),
        );
    
        $query = new WP_Query($args);
        if (!$query->have_posts()) return '<p>指定された日付の個別記事は見つかりませんでした。</p>';
    
        $output = '<div class="daily-full-content-wrapper">';
        while ($query->have_posts()) {
            $query->the_post();
            
            $output .= '<article class="entry-item" style="margin-bottom: 60px; padding-bottom: 40px; border-bottom: 2px solid #000;">';
            $output .= '<h2 style="margin-bottom: 20px; font-size: 1.8em;"><a href="' . get_permalink() . '">' . get_the_title() . '</a></h2>';
            
            // 本文全文を表示
            $content = apply_filters('the_content', get_the_content());
            $output .= '<div class="entry-content-body">' . $content . '</div>';
            
            $output .= '</article>';
        }
        $output .= '</div>';
        
        wp_reset_postdata();
        return $output;
    });

    1月の記事の公開日がなぜか変わってしまっていて、このコードが使えず、それ用のタグを残さざるを得ませんでした。が、今後はこれを使って運用していこうと思います。

  • Geminiに今日の株式市場関連記事を聞いてみた(2)

    朝のGemini回答がいまひとつだったので、質問を変えました。11

    Geminiへの質問

    2026年3月18日の日本株式市場に影響を与えるニュースのうち、影響が大きい5件を挙げてください
    – 2026年3月17日~2026年3月18日に発行された記事にしてください

    アウトプットには
    – 記事のタイトル
    – URL
    – 100字ほどでの記事要約(日本語)
    を入れてください。

    またBlogに掲載したいと思うので、次のような形式のアウトプットも追加してください
    – 箇条書きで記事のポイントを記したテキストをURLのリンクを付けて表示
    – 各リストの下にインデントを入れて記事要約を表示

    Geminiの回答(11:15頃の実行です)

    `2026年3月18日(水)の日本株式市場は、前日までの続落から一転、1100円を超える記録的な大幅反発を見せる極めてダイナミックな一日となっています。

    投資判断に直結する、3月17日から18日にかけての最重要ニュース5選をお届けします。


    日本株式市場に影響を与える重要ニュース5選

    1. 日経平均株価が急反発、上げ幅一時1100円を突破

    • URL: https://kabutan.jp/news/marketnews/?b=n202603180361
    • 記事要約: 18日の東京株式市場で、日経平均株価は前日比1100円超の爆騰を見せ、5万4800円台まで回復しました。前日の米株高や原油安を好感した買いが入り、前日までの4営業日続落による割安感から幅広い銘柄に買い戻しが殺到しています。

    2. 円相場160円目前、片山財務相が「断固とした対応」を再表明

    • URL: https://www.gaitame.com/media/entry/2026/03/18/082608
    • 記事要約: ドル円が一時159円台まで円安が進む中、片山財務相は「いかなる時も万全の対応を取る」と述べ、為替介入を辞さない姿勢を改めて強調しました。日銀の植田総裁も物価目標実現への自信を示しており、金融政策への注目が集まっています。

    3. 2月貿易収支が予想外の黒字、輸出株にポジティブな影響

    • URL: https://fx.minkabu.jp/news/361491
    • 記事要約: 財務省が発表した2月の貿易統計(速報)によると、貿易収支は573億円の黒字となりました。大幅な赤字を予想していた市場にとってサプライズとなり、日本の輸出競争力の底堅さが意識され、自動車株などの支援材料となっています。

    4. 今夜の米FOMC、パウエル議長発言を前に市場は警戒と期待

    • URL: https://www.oanda.jp/lab-education/market_news/2026_03_18_usdjpy/
    • 記事要約: 日本時間19日未明に控える米連邦公開市場委員会(FOMC)の結果発表に向け、投資家は注視しています。政策金利の据え置きが濃厚視される中、パウエル議長が年内の利下げ時期についてどのような示唆を与えるかが焦点です。

    5. 地政学リスク一段落で海運・商社株が上昇率上位に

    • URL: https://www.yomiuri.co.jp/economy/20260317-GYT1T00334/
    • 記事要約: 中東情勢緊迫による原油高が一服し、前日の米市場でエネルギー価格が下落した流れを受け、東京市場でも海運や商社株に買いが流入。特に川崎汽船などの海運大手が高い上昇率を記録し、相場を牽引しています。

    Blog掲載用:本日のマーケットトピックス


    本日の爆騰を受け、テクニカル的な節目(5万5000円)の突破可能性や、今夜のFOMCを受けた明日のシミュレーションなども可能です。ご希望があればお知らせください。

    市場が動いていることもあるかもしれませんが、気になるニュースを選んでくれており、だいぶよいです。