Drupal の GitHub Webhook モジュールを改善しました。

Drupal の管理画面から GitHub Actions をトリガーするカスタムモジュール「GitHub Webhook」を改善しました。 https://github.com/nakamura196/Drupal-module-github_webhook 元は複数リポジトリ対応の基本的なモジュールでしたが、UI のタブ分離、権限の細分化、ワークフローステータス表示、自動トリガーなどの機能を追加しています。 改善前のモジュール 元のモジュールは、以下のような構成でした。 ファイル数 : 5ファイル(info.yml、routing.yml、links.menu.yml、permissions.yml、SettingsForm.php) 対応バージョン : Drupal 10 のみ リポジトリ : 複数対応済み(AJAX で動的追加・削除) 画面 : 設定とトリガーが同一画面(アコーディオン2つ) 権限 : access github webhook settings の1権限のみ(設定もトリガーも同じ権限) トークン管理 : パスワードフィールドに #default_value を設定(HTML ソースに平文で出力される) HTTP クライアント : new \GuzzleHttp\Client() を直接インスタンス化 例外クラス : use 文なしで catch ブロックに記述(名前空間の解決が不正) $ ] f ; o ' ' ' 改 r # # # 善 m t t d 前 [ y i e : ' p t f s e l a ト e ' e u ー t ' l ク t = t ン i > = _ が n > v g ' a # s p $ l d ' a t u e ] s h e f [ s i ' a ' w s u g o - = l i r > > t t d t _ h ' ( $ v u , ' c a b G o l _ i n u t t f e o H i k u g に e b - 設 n > 定 ' T g さ ] o e れ k t て = e ( い n ' た [ ' g ) i , t h u b _ t o k e n ' ) , H T M L に 平 文 出 力 さ れ る $ c l 改 i 善 e 前 n : t G = u z n z e l w e \ ク G ラ u イ z ア z ン l ト e を H 直 t 接 t p n \ e C w l i し e て n い t た ( ) ; 変更の全体像 改善前後のファイル構成の比較です。* は変更、+ は新規追加を示します。 ...

2026年2月11日 · 39 分 · Nakamura

Drupal 10 の管理画面からモジュール更新とコアアップデートを行う

共用サーバー上の Drupal 10.6.1 で、Backup and Migrate によるバックアップと Automatic Updates によるモジュール・コアの自動更新を設定した手順をまとめる。 現状確認 管理画面の「レポート > サイトの状態」を確認すると、3つの警告が出ていた。 Drupal コアの更新状況:期限切れ(バージョン 10.6.3 が入手可能) PHP APCu available caching:メモリ使用量が75%超え モジュールとテーマの更新状況:期限切れ 「レポート > 利用可能なアップデート」を見ると、以下のモジュールに更新があった。 Consumers 8.x-1.22 Geofield 8.x-1.66 Geofield Map 11.1.1 Leaflet 10.3.11 Backup and Migrate のインストール 更新作業の前に、まずバックアップ手段を用意する。 c o m p o s e r . p h a r r e q u i r e ' d r u p a l / b a c k u p _ m i g r a t e : ^ 5 . 1 ' v e n d o r / b i n / d r u s h e n b a c k u p _ m i g r a t e v e n d o r / b i n / d r u s h c r インストール後、「管理 > 環境設定 > 開発 > バックアップと移動」からクイックバックアップが実行できるようになる。バックアップ元に「デフォルト Drupal データベース」、バックアップ保存先に「ダウンロード」を選択して「今すぐバックアップ」を押すと、データベースのバックアップファイルがダウンロードされる。 ...

2026年2月10日 · 4 分 · Nakamura

さくらレンタルサーバー Drupal 更新手順

さくらのレンタルサーバーでDrupal 10.1.5から10.6.1へアップデートした際の手順をまとめます。 環境 サーバー:さくらのレンタルサーバー Drupal:10.1.5 → 10.6.1 インストール形式:従来型(tarball、web/ディレクトリなし) 事前準備 作業用ディレクトリの作成 バックアップは www 外に保存します(Webからアクセスできないようにするため)。 m k d i r - p / h o m e / [ ユ ー ザ ー 名 ] / b a c k u p s / d r u p a l ファイルのバックアップ c t d a r / h - o c m z e / f [ ユ / ー h ザ o ー m 名 e ] [ w ユ w ー w ザ ー 名 ] / b a c k u p s / d r u p a l / d r u p a l _ b a c k u p _ $ ( d a t e + % Y % m % d ) . t a r . g z [ d r u p a l デ ィ レ ク ト リ ] / データベースのバックアップ さくらのレンタルサーバーでは --no-tablespaces オプションが必要です。 ...

2025年12月26日 · 8 分 · Nakamura

Docker環境でDrupal 10にWDBモジュールをセットアップする手順

概要 この記事では、Docker環境でDrupal 10を構築し、言語学データベース用のWDBモジュールをインストールする手順を解説します。 前提条件 Docker Desktop がインストールされていること Git がインストールされていること 手順 1. Docker環境の構築 まず、docker-compose.ymlファイルを作成します: s e o r m d l m v a r u a i r i r e u i d p r m r c i m e o n p m o e o e e i e a a s l - v M M M M a a l p - r - s s a s d g t u i Y Y Y Y l g u e t t : d : b e a m m r S S S S : e m n m s 8 a b : : r e a o Q Q Q Q : e / d a : 0 r : t s r n L L L L s d d d d s r 8 t m : : i m _ _ _ _ d : r r r r _ i 0 : { a a e R D U P r u u u u o a : } r a d n O A S A u p p p p n d 8 a i l b t O T E S p a a a a : b 0 l a w : : T A R S a l l l l w d a / _ B : W l / / / / a b y v P A O : f m t p y : s a A S d R 1 i o h r s l r S E r D 0 l d e i a / S : u : . e u m v t l W p 2 s l e a e i O d a d . : e s t s b R r l r 7 / s : e t / D u u - o : : m : p p p p o / y a a h t p o s d l l p p t p q r 8 d t t l u . r d / p 2 u d r d a - p r u r l a a u p u p l p a p a / a l a c w l l h e w / e b w e p - / e b r b s b i u i t v l t m h a l e o e t s s d m e e / u e y d l s e e e f s a u l t / f i l e s 次に、必要なディレクトリを作成し、コンテナを起動します: ...

2025年8月7日 · 6 分 · Nakamura

DrupalのJSON:APIでcreatedやchangedに対するフィルタを適用する

概要 DrupalのJSON:APIでcreatedやchangedに対するフィルタを適用する方法の備忘録です。 背景 以下を参考にしました。 https://www.drupal.org/docs/core-modules-and-themes/core-modules/jsonapi-module/filtering 例えば、6/2以降に更新されたものだけをフィルタリングしようとした際、以下のクエリでは適切に動作しませんでした。 ?filter[a-label][condition][path]=changed&filter[a-label][condition][operator]=%3E%3D&filter[a-label][condition][value]=2025-06-02 正しい方法 以下の記事が参考になりました。 https://www.reddit.com/r/drupal/comments/1bdvu61/json_api_drupal_filter_on_date/ Note that timestamp fields (like created or changed) currently must use a timestamp for filtering: タイムスタンプフィールド(createdやchangedなど)は現在、フィルタリングにタイムスタンプを使用する必要があります。 例えば、2025/6/2のタイムスタンプ1748790000を用いて、以下のようなクエリを使用することで、正しくフィルタリングできました。 ?filter[a-label][condition][path]=changed&filter[a-label][condition][operator]=%3E%3D&filter[a-label][condition][value]=1748790000 まとめ DrupalのJSON:APIで、createdやchangedに対するフィルタを適用する際にお役に立てば幸いです。

2025年6月3日 · 1 分 · Nakamura

IIIF Presentation API v2のIIIFコレクションで、ページネーションを使う

概要 IIIF Presentation API v2のIIIFコレクションで、ページネーションを使う機会がありましたので、備忘録です。 背景 IIIFコレクションでは、以下のように、複数のマニフェストファイル(およびコレクション)の一覧を提供することができます。 https://iiif.io/api/presentation/2.1/#collection { } " " " " " " " " ] @ @ @ l v d a m c i t a i e t a { } o d y b e s t n n " p e w c r i " " " t : e l i r i f @ @ l e " " n i b e i t a x " : : g p u s d y b t h H t t t " p e " t " " i i i s : e l : t s T n o o " " " p c o t n n : " : : " : : p " " " h h / C : : : [ t " " t / o L t s B t e l e " " " p c o p x l v t D P : : o : a e e o e r / M k / m c l p s o / a / p t " c v e n 1 i l i C , r i x i " i e o o i d a f i . n l p e m e f o " l t d p s . r , e i l t i g c o b e " o t n y . , i i o a i o o E r p i n f x g i f a / / / f C m i p c o o p i r o r l l i e l l e f s l E e / e e x c O b n c a t r o t t m i g o a i p o a k t o l n n 1 i n e " i / o / , z m n t O a a / o r t n 2 p g i i / " a o f c , n n e o i " s n z , t t a " e t , x i t o . n j " s , o n " , この時、対象とするマニフェストファイルが多数になった場合、一つのIIIFコレクションでは配信が難しくなりました。 ...

2025年6月2日 · 7 分 · Nakamura

Drupalで管理者以外のユーザーにも設定画面へのアクセスを許可する方法

本記事の一部はAIが作成しました。 概要 Drupalでカスタムモジュールの設定画面を作成する際、管理者以外のユーザーにもアクセスを許可したい場合があります。今回は、GitHub Webhookモジュールを例に、この問題の解決方法を説明します。 問題の発生 最初の状態では、以下のようなルーティング設定でした: # g i g t p d r i h a e e t u t f _ _ q _ h b h a f t u p u _ : u o i i e b w l r t r r _ e t m l e m w b / s : e m i e h a : : e s b o d n s h o m \ ' t i o k i D G s o o . n r i : n k s / u t : . e c p H r t o a u ' o t n l b a u i f \ d t n i g W m i g g i e i n s / t b n g : g h h i . i u o s y t b o t m h _ k e l u w r b e S _ b e s w h t i e o t t b o i e h k n o \ g c o F s o k o ' n ' r f m i \ g S u e r t a t t i i n o g n s ' F o r m ' この設定では、administer site configuration権限を持つ管理者のみがアクセス可能で、一般ユーザーはアクセスできませんでした。 ...

2025年5月28日 · 7 分 · Nakamura

DrupalでJSON形式のFieldを扱うための「JSON Field」モジュールを使用する

概要 DrupalでJSON形式のFieldを扱うための「JSON Field」モジュールを使用する機会がありましたので、備忘録です。 https://www.drupal.org/project/json_field 結果、以下のようにエディタと共にJSONを扱えるようになりました。 インストール 以下により、ダウンロードします。 c d o r m u p s o h s e e r n r j e s q o u n i _ r f e i e ' l d d r u p a l / j s o n _ f i e l d : ^ 1 . 4 ' さらに、以下により、ウィジェットも有効します。 ...

2025年5月25日 · 1 分 · Nakamura

TEI/XMLファイルをS3互換のオブジェクトストレージでホストする

概要 TEI/XMLファイルをS3互換のオブジェクトストレージでホストする機会がありましたので、備忘録です。具体的には、mdx Iのオブジェクトストレージを対象にします。 https://mdx.jp/mdx1/p/about/system 背景 TEI/XMLファイルを読み込み、その内容を可視化するウェブアプリケーション(Next.js)を構築します。この時、ファイル数やサイズが小さい場合は、publicフォルダに格納していましたが、これらが大きくなった場合、別の場所でホストすることを考えました。 場所の選択肢は多々ありますが、今回はS3互換であるmdx Iのオブジェクトストレージを対象にします。 GUIを用いたオブジェクトストレージへのファイルアップロード オブジェクトストレージへTEI/XMLファイルをGUI経由でアップロードする方法も多々あります。その中で、これまではCyberduckを使用する方法や、GakunNin RDMを使用する方法などを紹介しました。 一方、今回の事例では、TEI/XML以外のコンテンツをDrupalで管理していました。そこで、Drupalとオブジェクトストレージを接続し、ユーザはDrupalの操作で完結できるようにしました。 Drupalとオブジェクトストレージの接続 以下のモジュールを使用します。 https://www.drupal.org/project/s3fs インストール後、環境設定のページ/admin/configから、S3 File Systemを選択します。 そして、アクセスキーや秘密鍵を登録し、さらにS3のバケット名を登録します。 またAdvanced Configuration OptionsのCustom Host Settingsにおいて、https://s3ds.mdx.jpを入力します。 これでオブジェクトストレージとの接続設定は完了です。 その後、各コンテンツタイプのフィード設定において、アップロード先として「S3 File System」を選択します。 また、今回はTEI/XMLファイルがアップロード対象となるため、「許可されている拡張子」として、xmlを入力します。 この結果、DrupalのGUIを介してアップロードしたTEI/XMLファイルが、mdx Iのオブジェクトストレージに格納されるようになりました。 (参考)DrupalのJSON:APIを用いたファイルの一括アップロード TEI/XMLの初期登録にあたり、Pythonを用いた一括登録を行いました。JSON:APIを用いたファイルの一括アップロードの方法は、以下の記事などが参考になりました。 https://www.drupal.org/node/3024331 一例ですが、以下のようなスクリプトで実現できました。 i i i f f f c m m m r r r l p p p o o o a o o o m m m s r r r s d d d d t t t d g t e e e e o l q A f f f f r j o t o d p e s s e b m i l # s # # # s s l # l l i g # c i e u u # f # w h h h # r i e q o n C _ o e e e o o o f e s f l p r i i e e e e f l u n v i i l i a D l エ s 認 l l g ロ g g t C r s l l フ l フ t a a a フ s s e m m i n d r f ン e 証 f f i グ i i l _ S f c e o ァ e ァ h d d d ァ p r e s i p p e i _ u . ド l 情 . . n イ n n l j h o s c R _ f c s # # s } : # s a = イ n イ f e e e イ o e i : p t m o o n t d p D ポ f 報 U P ( ン _ _ o s e g e s F t " o r e e d ル a ル o i r r r ル n s f r s p r r t _ o a R イ . ( S A s リ u r g o a i l r ト o { o f r s l r l _ f 名 m を p l s s s を s p i o t t : _ t l U ン J B E S e ク r e i n d n f f ー k s k _ e e f a f f " を e バ e e [ [ ア e o v n r ( e サ P ト S a R S l エ l s n = e _ . _ ク e e i t t l . " " " i . i { 取 イ n _ = ' ' ッ n e p t t g t s n イ A ( O s N W f ス p _ { r r s t ン n l e o u f h C A X s c l s 得 = ナ ( d C C プ = s r r ( l q e v ト L J N i A O ) ト = o u " s e e o を _ f s k r . e o c - e s e e リ f a s o o ロ e b i f l o d l ( の _ S A c M R : n r n = s s k 取 r . = e n c a n c C r ( l o モ i t e n n ー r . o n " o b m f o U B O P 認 E D f s l a { p s e 得 e D s n s d t e S E f s f s ー l a l t t ド e s s t フ a ) v R A N I 証 " e , m " o i n s R e _ c r e e p R x _ e . . ド e f e e q t e ( ァ d : e L S : _ ) = = { e C n o ( p U l r s f r n t F c t l D p で _ = . n n u a : f イ _ r ( E A E s = " o s n s o P f e r _ s t " - e o f R a 読 p h t t e t " ル d r 例 _ P N o o e : n e _ e n A . s f t - : T p k , U t み a f e - - s u フ ア o i ) U I D s s l r t . c l s L s p _ o = T o t e P h 込 t . a T D t s ァ ッ t d R ) P . . f e s e s o f e _ e o t k y " k i n t A . む h r d y i s _ イ プ e e L O g g . q e n t o ) B s n o e { p a e o y L b , e e p s . c ル ロ n = I e e D u l t a k : = A s s k n e p n n = p _ a a r e p p o ア ー v T = N t t R e f - t i S i e e " p " ( e B s ' d s ' o o d ッ ド r T e e U s . T u e r E o . n = : l : f N , A e r ( . ] s s e プ 失 u o n n P t U y s s e _ n s _ i " o S n b ) c i t ロ 敗 e s = v v A s S p _ q U _ t r c " c c C n u E a ' o = t ( = ー : ) . ( ( L . E e c = u R c a e s a a s S e u _ m ) p i u = ド g f " " _ p R " o e L o t s r p t r R i U e y ' o r 成 { e " D D B o N : d l s } u p f p i f F d R ( a ( a n l 2 功 r t { R R A s A e o t k s o _ l o _ ト , L f s ) p ' , 0 : e e s U U S t M " g s s i _ n t i n t ー } i p ] 0 s n e P P E ( E a = i . e e c s o c / o ク f / l f l h : { p v l A A _ , p = n g s s o e k a v k ン i j e : i = e f o ( f L L U p _ e s d . e t n e 取 e s _ c a i n " . _ _ R " l 2 r t i e t n i d n 得 l o p a f d l s D D U P L p i 0 e ( o # e _ o . _ 失 d n a t ' e e e R R S A } a c 0 s n = x r n a r 敗 , a t i a r n . U U E S / s a : p / こ = t e / p e : p h o t s a s P P R S u s t o t こ s v i s f i ) n t = m t A A N W s " i n o で 2 p n + p { i / / a h e a L L A O e : o s k ロ 0 o d j o c l n o c e } t _ _ M R r n e e グ 0 n . s n s e o c h a " u B B E D / s / . n イ : s a o s r _ d t m d ) s A A " " l e j c " ン e p n e f p e e e e _ S S ) ) o l s o , セ . i " . _ a / t n r c E E g f o o ッ t + , t t t { - t s o _ _ i . n k シ e j e o h t s ; , d U U n P " i ョ x s x k , y t e R R ? A } e ン t o t e p r f c } L L _ S s を n , n v e e i o " } f S 渡 " _ e } a l o { ) / o W す , r r / m e k r j r O e b { ' n i e s m R s o u a e s o a D p s u m s p n t } o e i e = o a = , n = d = s n p j s F } " e s i s e a / { l e / o . l { f f . n n s s f i . t o " t e i l s e d a ) e e e x e t : l n s t / u d a s } a s } m i " r _ " e o ) t c } n i o " _ c d ' c l e o e } o " k { i c e s s r , f _ d t a o t k a e = n f _ i r l e e s _ p d o a n t s a e ) . t e x t } " ) すでに対象コンテンツが作成済みで、例えばfield_fileといったフィールドにファイルをアップロードする目的で使用することができます。 ...

2025年5月24日 · 14 分 · Nakamura

DrupalのSortableviewsモジュールを使って、コンテンツを並び替えて、その結果をフィールドに保存する

概要 DrupalのSortableviewsモジュールを使って、コンテンツを並び替えて、その結果をフィールドに保存する方法について紹介します。 https://www.drupal.org/project/sortableviews 以下のように説明されています。 This one is similar to Draggableview module except it can save the position value ( After drag and drop the question ) into custom content type field. これは DraggableViews モジュールと似ています が、ドラッグ&ドロップで並び替えた後の 位置情報をカスタムコンテンツタイプのフィールドに保存できる 点が異なります。 インストール 通常の方法でインストールできました。 コンテンツタイプの作成 ソート対象のコンテンツタイプを作成します。ここでは、teamというコンテンツタイプを対象にします。 そして並び順の重みを保存するためのweightフィールドを作成しました。 Viewsの作成 作成したViewsは以下です。 まず、フォーマットを「Sortable table」にします。この時、field to use for weightの項目で、重みを保存したいフィールドを選択します。 次に、フィールドで「Sortableviews: Drag and drop …」を追加します。これにより、以下のようにドラッグ&ドロップのためのアイコンが表示されます。 さらに、並び替え基準として、「weight(昇順)」に設定しておきます。 最後、ヘッダーの部分で、「Save Sortableviews changes」を追加します。これにより、並び替え後に、「変更を保存」ボタンが表示されます。 APIからの利用 今回の設定では、ソート結果はfield_weightに保存されるため、例えば以下のようにAPIから利用できます。 /jsonapi/node/team?sort=field_weight 昇順に並び替えた結果を取得できます。これにより、decoupledな構成でもソート結果を利用することができます。 ...

2025年3月2日 · 1 分 · Nakamura

Next.js for Drupal の BASE_PATH 問題と修正方法(patch-package活用)

概要 Next.js for Drupalのv2.0.0が2025/2/11にリリースされました。 https://next-drupal.org/ https://next-drupal.org/blog/next-drupal-2-0 早速試してみたところ、BASE_PATHの取り扱いについて対応が必要だったので、備忘録です。 環境変数 環境変数のサンプルは以下のようになっています。 # # N N # D D # D E E R R R S R X X A U U R U e e T T u P P e P e q _ _ t A A q A u P I h L L u L h i U M e _ _ i _ t r B A n C C r R t e L G t L L e E p d I E i I I d V s C _ c E E A : _ D a N N f L / D O t T T o I / R M i _ _ r D n U A o I S A e P I n D E O T x A N = C n E t L = R R - _ - _ s e E d S d B i t T e E r A t r = m C u S e i R a R p E . e e n E a _ e v t d T l U x e r = . R a i R R o L m t e e e r = p h v v t g h l i e a r / t e s l i d t . t i e o p c f h d v c s o r i a e s : m o s t / / m i t e / f o h n s / r n i v i a o s i t d m r e m f o . i / r n e n a o m x / d m e a c m n m o i / t p n n a - l f / d v e i c m a . g i r c n n i o s f / a m e i c b r g o l v / n e i s f s c e i e r g s / / i s c c e o e r n s v s / i u c c m o e e n s r s / u n m e e x r t この時、NEXT_PUBLIC_DRUPAL_BASE_URLにhttps://site.example.com/xxxのようなベースパスを含めた形で指定すると、APIのリクエストはhttps://site.example.com/jsonapi/などに送られ、リソースを正しく取得できませんでした。 ...

2025年3月2日 · 10 分 · Nakamura

DrupalのSearch API Algoliaモジュールを試す

概要 DrupalのSearch API Algoliaモジュールを試す機会がありましたので、備忘録です。 https://www.drupal.org/project/search_api_algolia インストール Drupal 11では、以下でインストールできました。 c o m p o s e r r e q u i r e ' d r u p a l / s e a r c h _ a p i _ a l g o l i a : ^ 3 . 1 ' 設定 モジュールのインストール後、サーバとインデックスの設定を行います。 Add server Algoliaの設定画面で確認できる設定情報に基づき、サーバを作成します。ここでは、Write API Keyを使用しました。 ...

2025年3月1日 · 1 分 · Nakamura

DrupalのJSON:APIを用いて、ユーザ名とパスワードでデータ登録を行う

概要 過去に、DrupalのJSON:APIを用いて、Pythonによるデータ登録を行う記事を執筆しました。 以下は、Basic認証を用いた方法です。 また以下は、API Keyを用いた方法です。 これらに加えて、通常のログインによる登録を行うことができたので、備忘録です。 コード 以下の通りです。ログインやCSRFトークンを取得した上で、コンテンツを登録します。 i i i f c m m m r l p p p o a o o o m s r r r s d d d d t t t d e e e e o A f f f f r j o t p e s s e i l # s # # # s s l # l l i g # c i e c # u r i e q o n C _ o e e e o o o f e s f l r r e f l u n v l i a D l エ s 認 l l g ロ g g t C r s e 記 l s s e i n d r f ン e 証 f f i グ i i l _ S f c e a 事 p r e s i e i _ u . ド l 情 . . n イ n n l j h o s c R _ f c s # # s } : # s t 作 = o # u h c j e p : p t m n t d p D ポ f 報 U P ( ン _ _ o s e g e s F t " o r e e e 成 n r e o s s r r s p t _ o a R イ . ( S A s リ u r g o a i l r ト o { o f r s l r l _ リ f s s l a o o p i i o : _ t l U ン J B E S e ク r e i n d n f f ー k s k _ e e f a f c ク " e e , d k n o n n r ( e サ P ト S a R S l エ l s n = e _ . _ ク e e i t t l . " " " i . o エ { l e i = n t t t s n イ A ( O s N W f ス p _ { r r s t ン n l e o u f h C A X s c n ス s = f r e d s ( ( e v ト L J N i A O ) ト = o u " s e e o を _ f s k r . e o c - e s t ト e . s s a e " " l l ( の _ S A c M R : n r n = s s k 取 r . = e n c a n c C r e l r J = = t . コ エ o f o U B O P 認 E D f s l a { p s e 得 e D s n s d t e S E f n f e S s s a s ン ラ a ) v R A N I 証 " e , m " o i n s R e _ c r e e p R x _ t . q O e e t テ ー d : e L S : _ ) = = { e C n o ( p U l r s f r n t F c t ( D u N l l a ン : _ r ( E A E s = " o s n s o P f e r _ s t " - e o s R e A f f t ツ " d r 例 _ P N o o e : n e _ e n A . s f t - : T p k e U s P . . u が , o i ) U I D s s l r t . c l s L s p _ o = T o t e l P t I h s s 作 t d R ) P . . f e s e s o f e _ e o t k y " k i n f A s _ e e _ 成 r e e L O g g . q e n t o ) B s n o e { p a e o , L . E a s c さ e n = I e e D u l t a k : = A s s k n e p n n = _ p N d s o れ s v T = N t t R e f - t i S i e e " p " ( d B o D e i d ま p r T e e U s . T u e r E o . n = : l : f N a A s P r o e し o u o n n P t U y s s e _ n s _ i " o t S t O s n た n e s = v v A s S p _ q U _ t r c " c c C n a E ( I , _ = ! s ) . ( ( L . E e c = u R c a e s a a s S e : _ N c = " e g f " " _ p R " o e L o t s r p t r R U T o ) . e " U P B o N : d l s } u p f p i f F d R , o 2 s t { S A A s A e o t k s o _ l o _ ト i L k 0 t e s E S S t M " g s s i _ n t i n t ー c } i 1 a n e R S E ( E a = i . e e c s o c / o ク t / e : t v l N W _ , p = n g s s o e k a v k ン ) j s u ( f A O U p _ e s d . e t n e 取 : s , s " . M R R " l 2 r t i e t n i d n 得 o _ D D E D L p i 0 e ( o # e _ o . _ 失 n c R R " " } a c 0 s n = x r n a r 敗 a o U U ) ) / s a : p / こ = t e / p e : p d P P u s t o t こ s v i s i e A A s " i n o で 2 p n + p { / , L L e : o s k ロ 0 o d j o c { _ _ r n e e グ 0 n . s n s d r B B / s / . n イ : s a o s r a e A A l e j c " ン e p n e f t s S S o l s o , セ . i " . _ a p E E g f o o ッ t + , t t [ o _ _ i . n k シ e j e o ' n U U n P " i ョ x s x k d s R R ? A } e ン t o t e a e L L _ S s を n , n t . " } f S 渡 " _ a t ) / o W す , r ' e j r O e ] x s m R s [ t o a D p ' ) n t } o t a = , n y p j s p i s e e / o . ' n n s ] o " t . d a r e t e / u p a s l r _ a t c c i o e c d ( l e ' e } " { ' c , s r f _ t ) o } k " e n _ r e s p o n s e . t e x t } " ) これにより、以下で、コンテンツを登録することができました。 ...

2025年3月1日 · 9 分 · Nakamura

@sidebase/nuxt-authのローカル認証を試す

概要 @sidebase/nuxt-authのローカル認証を試す機会がありましたので、備忘録です。 背景 以下の記事で、@sidebase/nuxt-authを使って、Drupalの認証を行う方法を紹介しました。 上記の記事では、Nuxt3のSSRを利用して、@sidebase/nuxt-authのauthjsプロバイダを使用していました。プロバイダの説明は以下です。 authjs: for non-static apps that want to use Auth.js / NextAuth.js to offer the reliability & convenience of a 23k star library to the Nuxt 3 ecosystem with a native developer experience (DX) local: for static pages that rely on an external backend with a credential flow for authentication. The Local Provider also supports refresh tokens since v0.9.0. Read more here. (機械翻訳)authjs: 非静的なアプリ向けで、Auth.js / NextAuth.js を使用し、23,000以上のスターを持つ信頼性と利便性をNuxt 3エコシステムに提供します。開発者にネイティブな開発体験 (DX) を提供します。 local: 外部バックエンドを使用し、認証のために資格情報フローを利用する静的ページ向けです。このローカルプロバイダーは、バージョン0.9.0以降、リフレッシュトークンもサポートしています。詳しくはこちらをご覧ください。 ...

2025年1月13日 · 8 分 · Nakamura

Nuxt3と@sidebase/nuxt-authを使って、Drupalの認証を行う

概要 Nuxt3と@sidebase/nuxt-authを使って、Drupalの認証を行う方法です。 背景 以下の記事で、GakuNin RDMの認証を行う方法を紹介しました。 また、以下の記事で、Next.jsからDrupalのOAuthを利用する方法を紹介しました。 これらを参考にして、Nuxt3からDrupalのOAuthを利用します。 方法 ソースコードは以下のリポジトリでご確認いただけます。 https://github.com/nakamura196/nuxt-rdm 具体的には、以下です。 https://github.com/nakamura196/nuxt-rdm/blob/main/server/api/auth/[…].ts { } , i n t c c a } t } p } d a y l l u , o , r , : m p i i t u p } k a } o r } e e e e h r a , e s , f e ; " : : n n o l r s r r } n y c } c } c i } r i t i n e i d t t r : a c e e / : n o ) o ) o f e l u d a m m r " " I S i m o s d u a c n c c c g r } ; n m h } b ; n t t e r : m a a u D o d e z p s p p i s p { s l l o r e / s e e , o s ( h u ( n e i g p r a : c a r : e o r e i r t i i d a d u a t t a " d t ! r r p p : l e a u u r t o : n e R / e e e e n i s p h d C y r o n r { r : : l p t u e i c { s c u a q b n n : t r e i r o e o , j e w o o p " a h s t o e p e t n u u o t t _ e R / e d r n s s { f f r p p , l " e : n s r _ _ t t e d _ _ c t c u a s : s t o . n i i o r r " , R : s o t u i h s y i s o y t n u : e n o e t l l f o o , u u . c y r m / t d e n p _ t t = " n k w o e e i f f n s { e e p i e c ( = : c t e u i h P { t = ) k ) . l i i t e n s e : C a c r e : r m / a O - E e s e l l i R v s : o l o n u e x i e c w S T a { r n { u . e e m u . . ` n l n e s t t " : C a a T y w r s b n . . e n D e " $ f b t w e : . a o l i " p a o : , a e p C t R n c { i a e R p u ` n l t , e i r m m r o i U v o g c x U u u a t $ f b " t ( j e a o n m P . d ( k t R n s r h { i a f : ` s i f f e A D e ) ) L t e a o g c e r T o l i i C L R " . d S i R m r ( k t " e o n " l g o _ U , n r { e m u s i ) c a s k s e ( n A P e u a e n . z . d h p . e } u p ) f U A x p r C t c a n r ( p j n ; b r . i T L t a c o i o t e u p l s " o " d g H _ A l h n m d i x p r i o r f N r ( _ S u ` P f e e o t a o c n e を i o n u ) U C t , a i C n A l c a ( q ユ l u p . R O h r g _ u ` e t ) u ー e E l a d L P U a ( n c t , s i ; e ザ . m l l r , E r m ) f o h s o s ー p a , C u , l s . i " d U . n t の r i l p ( d g " e r e / 一 e l i a { r ( , " l n x f 意 f e l u ) , v - P a の e P n C p . . w a i I r r プ t l a d D w r l D r o ロ I i l r R w s e と e v フ d e C u U - e d し d i ァ , n l p P f : て _ d イ t i a A o t 利 u e ル S e l L r h $ 用 s d U e n C _ m e { e " R c t l T - r r , L r I i O u r e n を e d e K r e s a 画 t , n E l s . m 像 , t N e p s e と S _ n o t メ し e U c n a ー て c R o s t ル 使 r L d e u が 用 e e s " な ( t d b T U い 必 , " o e n 場 要 , d x k 合 に " y t n の 応 " } o フ じ , o ` w ォ て n ) n ー 調 { c ; ル 整 e U バ ) s ッ e ク r " , 名 前 の 優 先 順 位 を 設 定 まとめ 間違っている点もあるかもしれませんが、参考になりましたら幸いです。 ...

2025年1月12日 · 6 分 · Nakamura

NextAuth.jsを使ってDrupalのOAuthを利用する

概要 NextAuth.jsを使ってDrupalのOAuthを利用する方法に関する備忘録です。 挙動 Next.jsで作成したアプリにアクセスして、「Sign in」ボタンを押します。 Drupalにログインしていない場合には、ログイン画面に遷移します。 ログイン済みの場合、「許可」するかのボタンが表示されるので、許可します。 ログイン情報が表示されます。 Drupal側の準備 モジュールのインストール 以下のモジュールをインストールします。 https://www.drupal.org/project/simple_oauth 本記事執筆時点の最新の以下をインストールしました。 c o m p o s e r r e q u i r e ' d r u p a l / s i m p l e _ o a u t h : ^ 6 . 0 @ b e t a ' トークンを暗号化するための鍵の生成 鍵のペアを生成し、セキュリティのためにドキュメントルートの外に保存します。 ...

2025年1月9日 · 8 分 · Nakamura

Drupalのカスタムモジュールで、カスタム権限を使用する

概要 Drupalのカスタムモジュールで、カスタム権限を使用する機会がありましたので、備忘録です。 背景 以下の記事で、DrupalからGitHubのActionsを実行するモジュールを紹介しました。 ただし、権限をadminister site configurationに設定しており、管理者権限のユーザしか実行することができませんでした。 この点に対応したコミットは以下です。 https://github.com/nakamura196/Drupal-module-github_webhook/commit/c3b6f57bebfeda0556c929c8ed8ed62a0eb0a5c4 方法 以下、ChatGPT 4oの回答結果を共有します。 Drupalの_permissionには、特定のアクセス権限を設定するための値を設定できます。これによって、特定の役割を持つユーザーが、そのルートにアクセスできるかどうかを制御します。 _permissionに設定できる主な値は以下のようなものです: 一般的な権限 Drupalには、いくつかの標準的な権限が用意されています。以下は一般的に使用される権限の例です: administer site configuration - サイト全体の設定を管理できる権限 access content - コンテンツへのアクセス権限 administer users - ユーザーを管理できる権限 create content - コンテンツを作成できる権限 edit any content - 任意のコンテンツを編集できる権限 delete any content - 任意のコンテンツを削除できる権限 view user profiles - ユーザープロフィールを閲覧できる権限 administer permissions - 権限を管理できる権限 access administration pages - 管理者ページへのアクセス権限 administer taxonomy - タクソノミーを管理できる権限 カスタム権限 モジュール固有の権限を作成することもできます。例えば、github_webhookモジュールに独自の権限を作成し、_permissionで使用することも可能です。 カスタム権限を作成する場合は、github_webhook.permissions.ymlに以下のように権限を定義します: a c c t d r e i e e s t s s s l c t e r r g : i i i p c t ' t t h A i u c o a b c n c e : c w s e e s ' s b A s h G l : o i l o t o T k H w R u s U s b E e u t W s t e e i b r n h s g o s o t : k o S a e c t c t e i s n s g s a ' n d m o d i f y G i t H u b W e b h o o k s e t t i n g s ' そして、routing.ymlでこのカスタム権限を設定します: ...

2024年9月9日 · 2 分 · Nakamura

DrupalからGitHubのActionsを実行するモジュールを作成しました。

概要 DrupalからGitHubのActionsを実行するモジュールを作成しました。 https://github.com/nakamura196/Drupal-module-github_webhook 以下、使い方について説明します。 使い方 設定 モジュールのインストール後、以下にアクセスします。 /admin/config/github_webhook 以下のような画面に遷移します。 大きく、Respositories とTrigger Webhook に分かれています。 まず、Respositories のRepository 1にGitHub Actionsの実行対象のリポジトリの情報を入力します。Add repositoryやRemove repositoryから、リポジトリの追加と削除を行うことができます。 Event Typeには、GitHub Actions側で設定した値を入力します。初期値のwebhookは、以下のようなActionsを想定しています。 n o p c j a n e o o m : p w r r c p i n g c b b e u o e m o a d c r a s u : s b r p t i n g - u o n : i r s h r k o y s t e t r u c l u t D : a f s p s e s o r p e d n e - e n l i e i n : k e : l : s p p c o t s o t e n - - s n u l h w o : n s w n c " i o : a s o e _ r s : r : y p n n m e y s d y [ : i : a - : e s : i _ w r t w g p : : t s d e e e r e r u o [ p i b a i s o b C a " a s h d t " g u h c G m t p o e r n e t i a c a o e t c i t i h t k s u k o H n : c ] s - o n u " h : l u s b ] : a t / t t c P r e h a u s e g e t c e k s o u t @ v 3 設定後、画面下部の送信 ボタンを押して保存します。 ...

2024年8月24日 · 2 分 · Nakamura

DrupalのFacetsで並び順を指定する

概要 DrupalのFacetsで並び順を指定するための備忘録です。 方法 以下にアクセスすることで、ファセットの設定を変更することができます。 /admin/config/search/facets それぞれのファセットで編集ボタンを押すと、以下の画面に遷移します。 画面下部にFacet sorting という項目があり、カウントおよび名前順を設定することができます。名前順にしたい場合には、Sort by countのチェックを外します。 まとめ Drupalの利用にあたり、参考になりましたら幸いです。

2024年8月23日 · 1 分 · Nakamura

DrupalのSearch APIで非公開コンテンツをインデックスしないようにする

概要 DrupalのSearch APIで非公開コンテンツをインデックスしないようにする方法の備忘録です。 参考 以下にも記載がありました。 https://www.acquia.com/jp/blog/introduction-to-search-api-1 方法 以下において、「Entity status」を有効にする必要がありました。 /admin/config/search/search-api/index/xxx/processors まとめ 参考になりましたら幸いです。

2024年8月20日 · 1 分 · Nakamura