2025年2月12日水曜日

copilot-metrics-viewer を使ってみる

copilot-metrics-viewer を使ってみる

概要

copilot の無料枠を使い切ったかどうか確認するのに使えます
公式のイメージはないので自分でビルドします

また copilot/metrics の API を内部で使っているのですがこの API は Github エンタープライズ or 組織 にしか使えないので個人では使えません

環境

  • macOS 15.3
  • docker 27.5.1

事前準備

  • Enterprise または organization に対して、[Copilot metrics API access] ポリシーを有効にする必要があります
  • パーソナルアクセストークンを取得します

ビルド

  • git clone https://github.com/github-copilot-resources/copilot-metrics-viewer.git
  • cd copilot-metrics-viewer/
  • docker build -t copilot-metrics-viewer .

.env 修正

リポジトリ内にデフォルトの .env があるのでそれを流用すれば OK です
NUXT_GITHUB_TOKEN を修正しましょう

パーソナルアクセストークンに必要な権限は以下です

  • copilot
    • manage_billing:copilot
  • manage_billing:enterprise
  • read:enterprise
  • read:org

その他の設定はデフォルトのままです
今回個人用で誰でも使えるようなアプリではないので NUXT_OAUTH_GITHUB_CLIENT_ID 関連はコメントアウトします
NUXT_PUBLIC_IS_DATA_MOCKED=false にします
NUXT_PUBLIC_GITHUB_ORG は自身が所属する組織IDを入力します

  • vim .env
# Determines if mocked data should be used instead of making API calls.
NUXT_PUBLIC_IS_DATA_MOCKED=false

# Determines the scope of the API calls. 
# Can be 'enterprise' or 'organization' to target API calls to an enterprise or an organization respectively.
NUXT_PUBLIC_SCOPE=organization

# Determines the enterprise or organization name to target API calls.
NUXT_PUBLIC_GITHUB_ORG=xxx

NUXT_PUBLIC_GITHUB_ENT=

# Determines the team name if exists to target API calls.
NUXT_PUBLIC_GITHUB_TEAM=

NUXT_PUBLIC_USING_GITHUB_AUTH=false

# Determines the GitHub Personal Access Token to use for API calls.
# Create with scopes copilot, manage_billing:copilot or manage_billing:enterprise, read:enterprise AND read:org
NUXT_GITHUB_TOKEN=ghp_xxx

NUXT_SESSION_PASSWORD=something_long_and_random_thats_at_least_32_characters

# for Github OAuth
# NUXT_OAUTH_GITHUB_CLIENT_ID=
# NUXT_OAUTH_GITHUB_CLIENT_SECRET=

# to use a corporate proxy
# HTTP_PROXY=http://proxy.company.com:8080

起動

  • docker run -p 8080:80 --env-file ./.env copilot-metrics-viewer

動作確認

localhost:8080 にアクセスするとメトリックスが表示されます

最後に

Github エンタープライズ or 組織配下でないと取得できないので結構ハードルが高いかもです
個人の利用で取得する方法はないのだろうか

参考サイト

2025年2月11日火曜日

HEIC を jpeg に変換し更に exif 情報を削除するコマンド

HEIC を jpeg に変換し更に exif 情報を削除するコマンド

概要

exiftool が必要です

環境

  • macOS 15.2

コマンド

for file in `ls *.HEIC`; do
  filename=$file:t:r
  sips --setProperty format jpeg $file --out ${filename}.jpg
  exiftool -EXIF= -Orientation='Rotate 90 CW' ${filename}.jpg
done

最後に

Web サービスでもできますが一括でできるのでコマンドのほうが便利です

2025年2月10日月曜日

Windows にインストールした Minecraft Launcher が使っている java があるパス

Windows にインストールした Minecraft Launcher が使っている java があるパス

概要

わざわざ Java をインストールしなくてもこれを使えます

環境

  • Windows 11
  • Minecraft Launcher

パス

"%LOCALAPPDATA%\Packages\Microsoft.4297127D64EC6_8wekyb3d8bbwe\LocalCache\Local\Microsoft\WritablePackageRoot\runtime\java-runtime-alpha\windows-x64\java-runtime-alpha\bin\javaw.exe"

Mod などをインストールのに使うには

上記の %LOCALAPPDATA%\Packages\Microsoft.4297127D64EC6_8wekyb3d8bbwe\LocalCache\Local\Microsoft\WritablePackageRoot\runtime\java-runtime-alpha\windows-x64\java-runtime-alpha\bin に jar を移動して

  • java -jar xxx.jar

すれば起動できます
ダウンロードフォルダにおいて上記の java.exe を指定して実行してもクラスパスが見つからずにエラーになるので jar を移動してから実行しましょう

最後に

Minecraft Launcher のバージョンによってパスが変わるっぽいですが LOCALAPPDATA にあるのは間違いないっぽいのでその配下を探せばいいかなと思います

2025年2月9日日曜日

NeoForge で開発環境構築

NeoForge で開発環境構築

概要

これまでは forge の MDK を使ってきました
NeoForge は forge のチームが新たに作成したプロジェクトで forge のフォークになります
別プロジェクトになった経緯などはこちらに詳しく載っているので興味があれば見てください
今回は NeoForge の開発環境を作成しとりあえずビルドできるところまでやってみました

環境

  • macOS 15.2
  • Java 21.0.5
  • NeoForrge MDK 21.4.75-beta
  • minecraft 1.21.4

事前準備: OpenJdk のインストール

NeoForge MDK は Java21 が推奨なのでインストールしましょう

  • brew install openjdk@21
  • sudo ln -sfn /opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

MDK のダウンロード

ここから MDK を生成しダウンロードすることができます
Forge の MDK では最初から MODID などが決まっていましたが NeoForge ではそれらを MDK 生成時に決めることができます

今回はとりあえずデフォルトの examplemod にしましたが別の ID でも OK です

Gradle Plugin は「ModDevGradle」を選択しましょう
Minecraft Version は最新でも OK ですが最新だと MDK がまだベータなので注意しましょう

展開とビルド

ダウンロードできた zip ファイルを展開しビルドします

  • mkdir test
  • cd test
  • mv ~/Downloads/examplemod-template-1.21.4.zip .
  • unzip examplemod-template-1.21.4.zip

で展開します
gradlew コマンドに権限がないので付与します

  • chmod +x gradlew

あとはビルドすれば OK です

  • ./gradlew build

動作確認

ビルドやテスト用のコマンドは Forge と同じでした
起動して Mod 用のブロックがあることを確認します
Forge と違い NeoForge ではリソースに lang だけ初回からあるようです

  • ./gradlew runClient

最後に

NeoForge の MDK でとりあえず開発できるところまで構築してみました
このあとは普通に MOD を開発するだけです

機会があれば Forge で開発したコードを NeoForge にマイグレーションする作業もやってみたいです

参考サイト

2025年2月8日土曜日

gradle で管理しているプロジェクトに google-java-format を導入する方法

gradle で管理しているプロジェクトに google-java-format を導入する方法

概要

google-java-format は Java のコードをフォーマットしてくれるツールです
CLI でも使えますが別途インストールしたりプロジェクトごとに管理できないので今回は gradle 配下でインストールし実行する方法を紹介します

環境

  • macOS 15.2
  • Java 21.0.5
  • google-java-format 1.17.0

build.gradle の編集

主に2箇所追記します

plugins

まずは spotless というプラグインをインストールします

plugins {
	id 'com.diffplug.spotless' version '7.0.2'
}

spotless

format 用の定義を追加します
Java21 の場合は google-java-format は 1.17.0 以下を指定します

設定でいろいろなフォーマットが可能です
インデントはスペースではなくタブにしたりヘッダのコピーライト文も自動で追加したりできます

spotless {
    format 'misc', {
        // define the files to apply `misc` to
        target '*.gradle', '.gitattributes', '.gitignore'

        // define the steps to apply to those files
        trimTrailingWhitespace()
        leadingTabsToSpaces()
        endWithNewline()
    }
    java {
        // don't need to set target, it is inferred from java

        // apply a specific flavor of google-java-format
        googleJavaFormat('1.17.0').aosp().reflowLongStrings().skipJavadocFormatting()
        // fix formatting of type annotations
        formatAnnotations()
        // make sure every file has the following copyright header.
        // optionally, Spotless can set copyright years by digging
        // through git history (see "license" section below)
        licenseHeader '/* (C)$YEAR */'
    }
}

動作確認

  • ./gradlew spotlessApply

これで自動的にフォーマットされます

Tips

emacs で lsp-java を使っている際にエディタ側で自動でフォーマットされてしまうのを防ぐ方法は以下です

(setq lsp-java-format-enabled nil)
(setq lsp-java-format-on-type-enabled nil)

最後に

これでコードのフォーマットは統一することができます
エディタ側には google-java-format 用の linter がほしいところです

参考サイト

2025年2月7日金曜日

forge Mod をアンインストールする方法

forge Mod をアンインストールする方法

概要

アンインストーラはないので手動で削除するしかないです

環境

  • macOS 15.2
  • Java 21.0.5
  • forrge MDK 1.20.6-50.1.32
  • minecraft 1.20.6

Minecraft launcher から起動構成を削除する

Mod フォルダの削除

/Users/user01/Library/Application Support/minecraft/versions にある 1.20.6-forge-50.1.0 を削除します

ライブラリの削除

/Users/user01/Library/Application Support/minecraft/libraries にある net/minecraftforge/ を削除します

たぶんそれでも足りない

他の名前空間のライブラリも配置してるっぽいのですべてのファイルを確実に削除はできていないです
確実に削除したいのであればインストール時にログが残るのでそこに記載されている jar ファイルもすべて削除しましょう

一番確実なのは launcher ごと再インストールする

他の Mod もセーブデータもすべて削除されていいのであれば launcher ごと再インストールするのがいいかなと思います
セーブデータもなくなる可能性があるので慎重に行いましょう

  • アプリケーションにある Minecraft launcher の削除
  • /Users/user01/Library/Application Support/minecraft/saves のバックアップ
  • /Users/user01/Library/Application Support/minecraft/ ディレクトリの削除
  • https://www.minecraft.net/ja-jp/store/minecraft-java-bedrock-edition-pc ここにログインしてインストーラーをダウンロードし再インストール

最後に

もっと簡単に forge Mod だけを削除する方法はないのだろうか

2025年2月6日木曜日

Minecraft サーバーに forge MOD をインストールし更に自作の mod を動かす方法

Minecraft サーバーに forge MOD をインストールし更に自作の mod を動かす方法

概要

forge Mod をサーバ側に導入する方法と更にサーバ側に自作の mod をインストールする方法を紹介します

環境

  • macOS 15.2
  • docker 27.4.0
  • itzg/minecraft-server 2025.1.0
  • forrge MDK 1.20.6-50.1.32
  • minecraft 1.20.6

compose.yaml

ポイントは TYPE: "FORGE" の追加です
これで起動するとサーバ側は forge のインストールが始まり forge MOD がインストールされた状態で起動します

forge MOD を使う際は VERSION と FORGE_VERSION を指定したほうがいいです
指定しない場合は最新が自動でインストールされますがこれから導入する mod が最新版に対応していないケースもあるのでバージョンはどちらも指定したほうがいいです

services:
  mc:
    image: itzg/minecraft-server
    tty: true
    stdin_open: true
    ports:
      - "25565:25565"
    environment:
      EULA: "TRUE"
      MODE: "creative"
      TYPE: "FORGE"
      VERSION: "1.20.6"
      FORGE_VERSION: "50.1.32"
    volumes:
      - ./data:/data

自作 mod の導入

今回は「クライアント mod」を導入します
mod にはクライアント mod の場合はサーバ側にもクライアント側にも mod を導入する必要があるので注意してください

サーバ側は ./data/mods/examplemod-1.0.0.jar に配置すれば docker compose up -d 時に自動でコンテナ側に mod が配置され有効になります
サーバ側のログを確認して mod のログが流れていれば OK です

あとはクライアント側の Minecraft にも examplemod-1.0.0.jar を導入する必要があります
forge をインストールし mod 配置用のパスに jar を配置すれば OK です

macOS の Java 版 Minecraft に forge MOD をインストールする場合に jar のダブルクリックからだと起動しないことがあります
その場合はシステム設定のプライバシーとセキュリティからブロックされている jar を開けば OK です
クライアント側の mod のパスは /Users/user01/Library/Application Support/minecraft/mods がデフォルトです

最後に

ポイントはサーバ側とクライアント側の状況を同じにする点です
マイクラ自体のバージョンと forge のバージョンも合わせる必要があるので結構大変です

サーバ専用の Mod であればクライアント側に同じ Mod をインストールする必要はありませんがカスタムブロックなどの Mod はすべてクライアント Mod なのでサーバ側とクライアント側に Mod をインストール必要が出てきます

参考サイト