MacのSpotlightでアプリ名を入力してもヒットしないときの対処方法
以前は、Spotlightでアプリ名を入力すると、そのアプリが候補に挙がっていたのですが、ある日突然候補にも挙がらなくなってしまいました。
調べてみると、Spotlightのインデックスを再構築すれば直るということで、実行してみるも今回は改善されずでした。
以前も同様の症状があり、インデックス再構築で直っていたときもありました。
ChatGPTで聞いてみて、いくつか候補があった中で改善された方法を紹介します。
なぜ検索にヒットしないのか
単純にインデックスに問題があると思われがちです。
ですが、macOS Sequoia 以降では、「メタデータの未生成」や「登録情報の不整合」が原因となっているケースが増えているようです。
それが原因で検索してもヒットしない状態になっているようです。
試したこと
- インデックスの再構築→改善されず
- アプリの再インストール→改善された
- メタデータ再生成コマンド実行→改善された
環境
MacOS 15.7.5
対処方法
# アプリ単体(例:Docker.app) mdimport /Applications/Docker.app # アプリ全体(Applicationsフォルダ配下) mdimport /Applications
まとめ
OSのアップデートをしたときは、動作確認の上、今回の問題が発生したときは実行するようにした方がよさそうですね。
MacのOSアップデートは、今までは安定していて問題ないことが多かったです。
しかし、最近はあるバージョン以降、更新すると不安定やら不具合が多くなってきた印象があります。
Windowsみたいに更新すると不具合増量するのは勘弁してほしいです。
アプリ開発の作業もあるので、アプリが対応していないこともあるから最新版にはせず、1つ前のバージョンを使うようにしています。
今後もそのような運用で更新しようとは思います。
Crystal Reports のダウンロード方法
Visual Studio 2019 から 2022 へのバージョンアップを検証しようと思い、Crystal Reportsのダウンロード先を探していました。
しかし、以前のページからダウンロードできなくなっていました。
shinsuke789.hatenablog.jp
毎回ダウンロードページが変わり困るので、2025年12月時点のダウンロード方法をまとめました。
ダウンロード手順
Visual Studio 2022用で説明します。
1.以下のサイトにアクセスする
origin.softwaredownloads.sap.com
2.「Selection Criteria」の下にある「Software Product」で「SAP Crystal Reports, version for Visual Studio」を選択する、選択すると右隣の2つのプルダウンが自動選択される
3.右側にある「Go」をクリックし検索する
4.一覧からOS列「Windows on x64 64bit」でPublishedが最新のものまでスクロールする
5.以下のリンクをクリックしてダウンロードする
- CR for Visual Studio SP38 64b installer (VS 2022 and above)(開発環境用)
- CR for Visual Studio SP38 Merge Modules 64-bit(インストーラー用)
SP横の数値はバージョンなので、都度変わります。
Visual Studio 2026 がリリースされていますが、Crystal Reportsは未対応のため、まだ2022を使うのがよいと思います。

Java Date Time API のフォーマットまとめ
JavaのDate Time APIのフォーマットを簡単にまとめてみました。
実行時ににエラーが発生するものは除外しています。
// 2024-09-19 LocalDate.now().format(DateTimeFormatter.ISO_DATE); // 20240919 LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE); // 2024-09-19 LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); // 2024-263 LocalDate.now().format(DateTimeFormatter.ISO_ORDINAL_DATE); // 2024-W38-4 LocalDate.now().format(DateTimeFormatter.ISO_WEEK_DATE); // 11:07:50.769682 LocalTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME); // 11:07:50.769805 LocalTime.now().format(DateTimeFormatter.ISO_TIME); // 2024-09-19 LocalDateTime.now().format(DateTimeFormatter.ISO_DATE); // 20240919 LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE); // 2024-09-19T11:14:58.457402 LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME); // 2024-09-19 LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE); // 2024-09-19T11:14:58.457541 LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); // 11:14:58.457636 LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME); // 2024-263 LocalDateTime.now().format(DateTimeFormatter.ISO_ORDINAL_DATE); // 11:14:58.457764 LocalDateTime.now().format(DateTimeFormatter.ISO_TIME); // 2024-W38-4 LocalDateTime.now().format(DateTimeFormatter.ISO_WEEK_DATE); // 2024年9月19日木曜日 LocalDate.now().format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)); // 2024年9月19日 LocalDate.now().format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG)); // 2024/09/19 LocalDate.now().format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)); // 2024/09/19 LocalDate.now().format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)); // 2024/09/19 6:06:06, 2024/09/19 14:19:49 LocalDateTime.now().format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)); // 2024/09/19 6:06, 2024/09/19 14:19 LocalDateTime.now().format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)); // 6:06:06, 14:23:30 LocalTime.now().format(DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM)); // 6:06, 14:23 LocalTime.now().format(DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT))
VMWare Fusionを直接ダウンロードする
VMWare Fusionが個人利用限定で無償利用できるようになりました。
提供会社が変更されてしまい、ダウンロードするにはアカウントが必要で、かなりわかりにくく面倒くさい形になってしまいました。
調べてみるとアカウント登録しなくても簡単にアプリをダウンロードする方法があったので紹介します。
ダウンロード方法
1.ターミナルを開く
2.以下のコマンドを実行する
# 最新バージョン bash <(curl -sSL https://gist.github.com/jetfir3/6b28fd279bbcadbae70980bd711a844f/raw/download_fusion.sh) # バージョン指定 bash <(curl -sSL https://gist.github.com/jetfir3/6b28fd279bbcadbae70980bd711a844f/raw/download_fusion.sh) -v 13.6.2
3.ダウンロードされたファイルをアプリケーションフォルダに移動する
FullCalendar.js v6の使い方まとめ
Googleカレンダーのようなカレンダーを自前で実装できるFullCalendar.jsの使い方を実際に使った機能だけまとめました。
使用バージョン
FullCalendar.js v6.1.11
fullcalendar.io
設定項目(全体)
<div id="calendar"></div>
const $calendar = document.getElementById('calendar'); const calendar = new FullCalendar.calendar($calendar, { // ライセンスキー schedulerLicenseKey: '購入した場合にライセンスキーをここに書く', // 日本語設定 locale: 'ja', // 編集可 editable: true, // ドロップ可 droppable: true, // ヘッダーカスタムボタン customButtons: { // 作成ボタン createButton: { text: '予定・タスクの作成', click: function() { } } }, // 最大表示イベント数(最大値を超えた部分は「+more」で表示) eventMaxStack: 5, // 日表示時の最大表示イベント数(最大値を超えた部分は「+more」で表示) dayMaxEvents: 5, // イベント表示順 eventOrder: 'type, id', // イベント events: { url: `/api/schedule/`, method: 'POST', extraParams: () => { } failure: (error) => { console.log(error); } }, // イベントの時間フォーマット eventTimeFormat: { hour: 'numeric', minute: '2-digit', meridiem: false }, // イベントドロップ制御 eventAllow: (info, event) => {}, // イベントドロップ eventDrop: (info) => {}, // イベントリサイズ eventResize: (info) => {}, // イベント内容 eventDidMount: (info) => {}, // イベントクリック eventClick: (info) => {}, // カレンダー内日付・時間枠クリック dateClick: (info) => {}, // +moreリンク moreLinkContent: (e) => {}, // +moreリンク描画後 moreLinkDidMount: (e) => {}, // 初期カレンダータイプ initialView: 'dayGridMonth', // ビューごとの設定 views: { dayGridMonth: { dayMaxEventRows: 5 } }, // カレンダー表示領域の高さ contentHeight: 815, // 時間帯までのスクロール位置 scrollTime: '06:00:00', // 週始まり firstDay: 1, // 月曜開始 // 日コンテンツ dayCellContent: function(e) { return e.dayNumberText.replace("日", ""); }, // ヘッダーボタン headerToolbar: { left: 'createButton', center: 'prev title next', right: 'timeGridWeek,timeGridDay,dayGridMonth' }, // ヘッダーボタンテキスト buttonText: { week: '週', day: '日', month: '月' }, // 終日テキスト allDayText: '', // スロットコンテンツ slotLabelContent: function(arg) { return arg.date.getHours(); }, // 日ヘッダー描画後 dayHeaderDidMount: (e) => {}, // 日付設定後 datesSet: (dateInfo) => {}, });
設定項目詳細
個別に公式リンクを貼っていますが、バージョンアップされて消えた項目はページがなくなるのでご注意ください。
また、マイナーバージョンアップでも大幅に変更される項目もあります。
schedulerLicenseKey
購入したライセンスキーを設定します。
これを設定するとカレンダー下部の未ライセンス時の表示が消えます。
editable(default: false)
カレンダー上でイベントを変更できるか設定します。
変更可能はtrue、変更不可はfalseです。
droppable(default: false)
外部のドラッグ可能な要素または他のカレンダーのイベントをカレンダーにドロップできるか設定します。
customButtons
ヘッダーまたはフッターツールバー内に表示させる任意にカスタムボタンを定義します。
設定可能なプロパティ
- text: ボタン内のテキスト
- hint: ヒント
- click: クリック時の処理
- icon: アイコン
- bootstrapFontAwesome: Bootstrapテーマが有効なときのアイコン
eventMaxStack(default: null)
timeLineView:上から下に積み重ねられるイベントの最大数
timeGridView:左から右に積み重ねられるイベントの最大数
最大数を超える部分は、「+more」等で表示され、押下でポップアップ表示されます。
dayMaxEvents
dayGridView:上から下に積み重ねられるイベントの最大数
最大数を超える部分は、「+more」等で表示され、押下でポップアップ表示されます。
eventOrder(default: 'start,-duration,allDay,title')
同日内でのイベントの並び順を設定します。
イベント内のプロパティ名を指定します。
指定プロパティ名の先頭に「-」をつけると降順となります。
events(as a json feed)
カレンダーに設定するイベントを定義します。
イベント設定は、主に固定値・APIから取得の2種類になるかと思います。
基本的には、APIから取得すると思うので以下の定義でイベントを取得します。
events: { url: `{APIのURL}`, method: '{GET、POST等}', extraParams: () => { // APIに対してパラメータがある場合は、key: valueの形式で書く } failure: (error) => { console.log(error); } }
eventTimeFormat
イベントの時間フォーマットを設定します。
以下は、「7:00、10:00」のような形式の設定方法です。
eventTimeFormat: { hour: 'numeric', minute: '2-digit', meridiem: false },
eventAllow(eventDropInfo, event)
イベントのドロップ先を制御します。
第1引数:ドロップ先情報
第2引数:イベント情報
戻り値:ドロップ可能はtrue、ドロップ不可はfalse
eventResize(eventResizeInfo)
イベントのサイズ変更の処理を行います。
第1引数:イベントリサイズ情報
戻り値:なし
eventDidMount(info)
要素がDOMに追加された直後に呼び出されます。イベントデータが変更された場合、これは再度呼び出されません。
この処理でDOM追加後の要素の表示変更等を行います。
第1引数:パラメーター(event、el等を含む)
戻り値:なし
eventClick(eventClickInfo)
イベントクリック時の処理を行います。
第1引数:イベントクリック情報
戻り値:なし
dateClick(dateClickInfo)
カレンダー内の日付・時間枠クリック時の処理を行います。
第1引数:日付クリック情報
戻り値:なし
moreLinkContent
「+more」の内容を設定します。
ロケール設定で日本語化されないので、別途日本語対応が必要です。
moreLinkDidMount
「+more」のDOM追加後に処理を行います。
「+more」要素に対してなにかしたい場合は、ここに処理を書きます。
initialView
初期表示時のビューを設定します。
設定値例
- dayGridMonth
- dayGridWeek
- timeGridDay
- listWeek
dayCellContent(cell)
日セル(
第1引数:日セル情報
// 例:「10日」→「10」にする cell.dayNumberText.replace("日", "");
Day-Cell Render Hooks - Docs | FullCalendar
headerToolbar
ヘッダーツールバーを設定します。
位置
- start:左
- center:中央
- end:右
コンテンツ
- title:現在の月/週/日
- prev:日・月・年を戻るボタン
- next:日・月・年を進むボタン
- prevYear:前年ボタン
- nextYear:次年ボタン
- today:本日ボタン
- ビュー名(dayGridMonth等)
buttonText
ボタンのテキストを設定します。
- today:本日
- month:月
- week:週
- day:日
- list:リスト
|
buttonText - Docs | FullCalendar
allDayText
日・週カレンダー表示時に左の時間軸上部にある終日予定のラベルを設定します。
公式ドキュメントではv4までとありますが、v6でも使えます。
デフォルトは「all-day」が表示されるので、不要な場合は「''」を設定すると空にできます。
dayHeaderDidMount
日・週カレンダー表示時の日ヘッダーのDOM描画後の処理を行います。
使用例として、休日は背景色をピンクにするなどです。
datesSet(dateInfo)
カレンダーの日付範囲が最初に設定または何らかの方法で変更され、DOM が更新された後に呼び出されます。
使用例として、カレンダーの日付が変わったときにスクロール位置を調整するなどです。
第1引数:日付情報
Gitの履歴内のユーザー名とメールアドレスを変更する方法
Gitでソース管理をしていますが、GitHub以外のリポジトリでもGitを使っている場合、ユーザー情報が異なる場合があります。
いろんな開発をしてると、流れでそのままコミットしてしまうので、意図しないユーザー情報でコミットしてしまうことがあります。
そんなときのユーザー情報の変更のやり方をまとめました。
古いやり方(filter-branch)
やり方を調べて、以下のコマンドを実行すると、警告文が表示されました。
git filter-branch --commit-filter ' if [ "$GIT_COMMITTER_EMAIL" = "xxx@users.noreply.github.com" ]; then GIT_COMMITTER_EMAIL="xxx@gmail.com"; GIT_AUTHOR_EMAIL="xxx@gmail.com"; git commit-tree "$@"; else git commit-tree "$@"; fi' HEAD WARNING: git-filter-branch has a glut of gotchas generating mangled history rewrites. Hit Ctrl-C before proceeding to abort, then use an alternative filtering tool such as 'git filter-repo' (https://github.com/newren/git-filter-repo/) instead. See the filter-branch manual page for more details; to squelch this warning, set FILTER_BRANCH_SQUELCH_WARNING=1.
filter-branch は壊れた履歴を生成する可能性があるため、filter-repo を使ってくれとのこと。
新しいやり方(filter-repo)
新しいやり方は、filter-branch とは異なり少し事前準備が必要です。
1.名前と変更前後のメールアドレスを記載したファイルを作成する
ファイル名は何でも良いです。
中身は以下の形式で作成して下さい。
名前 <新しいメールアドレス> <古いアドレス(変更したいもの)> 例1:名前にブランクを含まない yamada <xxx@gmail.com> <xxx@users.noreply.github.com> 例2:名前にブランクを含む(名前を""で括る) "yamada taro" <xxx@gmail.com> <xxx@users.noreply.github.com>
2.filter-repo を実行します
git filter-repo -f --mailmap email.txt
3.ログで変更されているか確認する
4.pushする
XSERVERでCodeIgniter4を動かすための.htaccessの設定方法
XSERVERでCodeIgniter4を動かそうとすると、どうもmod_rewriteが認識されていないようだったので、どこで設定するのか少しハマりました。
今後もハマらないようにメモとして記事に残しておきます。
2025/08/14追記
スターサーバーの内部仕様がXSERVERベースに変更されました。
そのため、この記事はスターサーバーでも有効であることを確認しました。
XSERVERの仕様
XSERVERで使われているWebサーバーはNGINXですが、なぜかApacheの.htaccessが動作する謎仕様です。
ドメインごとにホームディレクトリが作られるので、その中の「public_html」配下がWebサイトとして動作するディレクトリになります。
XSERVERでの.htaccessの設定場所
上記仕様の通り、.htaccessは「public_html」配下に置かれたものが認識されます。
CodeIgniterにもpublicディレクトリ配下に.htaccessがありますが、こちらはなぜか認識しないので編集しても動作が変わらない点に注意してください。
FTPやファイルマネージャーから直接.htaccessを編集しても良いですが、サーバーパネルにある「.htaccess編集」から編集すると簡単に操作できます。
www.xserver.ne.jp
CodeIgniter用の.htaccess内容
以下の内容で追記してください。間違っても既存の設定を削除しないように気をつけましょう。
CodeIgniter3、4で動作確認済みです。
# mod_rewrite有効化 RewriteEngine On # https強制 RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # index.phpの置換 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
