GakuNin RDM Search API (`/api/v1/search/`) 調査メモ

調査日 : 2026-02-24 対象 : GakuNin RDM (GRDM) の Search API ソースコード : RCOSDP/RDM-osf.io(website/search/ ディレクトリ) 開発者ガイド : RCOSDP/RDM-developer-guide 注意 : Search API の公式ドキュメントは確認できませんでした。本稿は API の実際の挙動とソースコードの両方に基づく調査記録です。 概要 GakuNin RDM は OSF (Open Science Framework) のフォークであり、ソースコードは GitHub (RCOSDP/RDM-osf.io) で公開されています。検索機能の実装は website/search/ ディレクトリにあり、主に以下のファイルで構成されています。 ファイル 役割 elastic_search.py インデックスのマッピング定義、ドキュメントの登録・更新 views.py API エンドポイントのハンドラ util.py build_private_search_query() 等のクエリ構築 search.py 上位インターフェース P A O u S t T h o h r t i t z p a s t : i / n r : d m B . e n a i r i e . r a c < . パ j ー p ソ / ナ a ル p ア i ク / セ v ス 1 ト / ー s ク e ン a > r c h / 日本語環境では Elasticsearch の kuromoji_analyzer が使用されています(ソースコードで確認)。 ...

2026年2月24日 · 5 分 · Nakamura

Github Actionsを使ってGithubからEC2までのDjangoのCICD環境構築(2023版)

概要 Github Actionsを使ってGithubからEC2までのDjangoのCICD環境を構築する機会があり、その備忘録です。 以下の記事を参考にさせていただきました。 https://qiita.com/fffukken/items/27b0bfa712940914d3f6 上記の記事に対して、Github Actionsの設定を一部更新しました。 Github Actionsの設定 n o j a n o m : p p b b e u u s u : s b l b : i r s s - - - - - e h r l r l u t t n T : a _ a d n r m m e u n u w n r n r n r v S E E e n r n : s a a a p s a s i a u a u a u : E C C s c e c - t x t p s e m e t p m n p p m n p p p m n e c s & & & & & & C 2 2 t h q h o e - r y : s e s h y e : y i e : y y y e : c h s & & & & & & R _ _ e u e n g p i t : : : : t : t p : t t t : h m h E U H a s e s : y a x h h | h | h h h o c g p p d s T S O n : s : : r : o a S a o I o i R o o o d d d i y y e u _ E S d t u a n c e c n n n n u n n n e " o t t t a d K R T [ : [ b l - t t t - s s n p $ 6 S ~ h h c o E : : D u l v i i v t - t m m m l S 0 t / p o o t Y e d d n e e o u o e a m a T a a a o E 0 r < u n n i s : $ $ p e e t l r n p n r l l e n n n y C i プ l v y { { l v v u : s s s s l p l s a a a R s c ロ l m m a s $ { { o e e - i / P / i i t g g g E e t ジ a a t t { y l l l 4 o c y s o D p - s e e e T c H ェ o n n e e { s s o o a n h t e n e r . . . _ r o ク r a a m e e p p t : e h t : p i p p p K e s ト i g g \ c s c c , e c o u e n r y y y E t t 名 g e e t e r r ] s [ k n p $ n s e Y _ K > i . . l c e e m t 3 o - { d t q m m t " k e \ n p p r t t a . u $ p { e a u a i e e y y y r e s s i 9 t { y n l i k g s > y C m e t . . n , @ { t m c l r e r t h a m m s s E E v h a i e m a s e i a i t . C C ] " 3 m o t e m i t e c n k g a S 2 2 3 a n r s - e g e c k e r r E _ _ . t @ i u n r r i \ m a t C U H 1 r v x p t a e n i t R S O 0 i 4 . g s t t g g e g E E S " x p r . i _ = r u T R T ] . y a t o k n a \ n _ p t d x n e o t i K } } y h e t s y i c E } } t o $ o o Y h n p { n r o - i E s n } n v p C " } - e 2 \ v r _ e s U r i S s o E i n R o } n } @ } $ } { } E C 2 _ H O S T } - i s e c r e t _ k e y " s o u r c e < 仮 想 環 境 名 > / b i n / a c t i v a t e \ 変更した点として、actions/checkoutとactions/setup-pythonのバージョンを変更しました。また、pip installの部分を変更し、pip install -r requirements.txtにしました。 ...

2023年7月9日 · 5 分 · Nakamura

django-simple-history: Djangoでモデルの編集履歴を記録する

概要 Djangoで編集履歴を残す方法を調べたので、その備忘録です。 以下のメッセージのように、デフォルトでは、管理画面を通じた編集履歴は記録されるが、それ以外の画面を通じた編集履歴は残らないようでした。 This object doesn’t have a change history. It probably wasn’t added via this admin site. django-simple-history そこで、以下のパッケージを使ってみます。 https://django-simple-history.readthedocs.io/en/latest/ 以下のクイックスタートのページを参考にすることで、問題なく利用できました。 https://django-simple-history.readthedocs.io/en/latest/quick_start.html 参考 以下のように、編集履歴に関するテーブルが追加され、編集履歴が記録されるようになりました。 また管理画面から、以下のような編集履歴を確認できるようになりました。管理画面以外の画面からの変更履歴を確認できました。 まとめ Djangoで編集履歴を残す際に参考になりましたら幸いです。

2023年7月3日 · 1 分 · Nakamura

Django Rest Framework (DRF)で部分一致フィルタを実装する

Django Rest Framework (DRF)で部分一致フィルタを実装するためには、Djangoフィルターバックエンドを使うのが一般的です。これは、django_filters モジュールを使用します。 このモジュールをまだインストールしていない場合は、以下のコマンドでインストールできます: p i p i n s t a l l d j a n g o - f i l t e r 以下は、部分一致検索を実現するための一般的な手順です: フィルタセットを定義します。以下はmodels.pyに存在するMyModelというモデルでnameフィールドを部分一致検索するためのフィルタセットです: i c m l p a o s r s n c t a l M m a d y e s j M s m f a o = o i n d M d e g e d e e l o l j t l d _ F a a s f i n : = i l g = l t o M t e _ y [ e r f M ' r ( i o n s d l d a j t e m a e l e n r ' g s , o . ] _ C f h i a l r t F e i r l s t . e F r i ( l l t o e o r k S u e p t _ ) e : x p r = ' i c o n t a i n s ' ) ここで、lookup_expr=‘icontains’は、大文字小文字を区別せずに部分一致を行うための設定です。 ...

2023年7月3日 · 3 分 · Nakamura

DjangoのModelFormを使用してアップロードしたファイルのパスを取得する

DjangoのModelFormを使用してアップロードしたファイルのパスを取得する機会がありましたのでメモします。 以下のモデルを想定します。 c l a s s f i D l o e c u = m e m n o t d ( e m l o s d . e F l i s l . e M F o i d e e l l d ) ( : u p l o a d _ t o = ' d o c u m e n t s / ' ) 上記に対して、以下のようなviewsで、パスにアクセスすることができました。 ...

2023年6月20日 · 3 分 · Nakamura

DjangoとAWS OpenSearchを接続する

概要 DjangoとAWS OpenSearchを接続する方法に関するメモです。以下の記事が参考になりました。 https://testdriven.io/blog/django-drf-elasticsearch/ ただし、上記の記事はElasticsearchを対象にした設定のため、OpenSearchに応じた変更が必要です。 変更点 以下のElasticsearch Setupの部分から、OpenSearchに応じた変更が必要でした。 https://testdriven.io/blog/django-drf-elasticsearch/#elasticsearch-setup 具体的には、以下の2つのライブラリが必要でした。 ( ( e e n n v v ) ) $ $ p p i i p p i i n n s s t t a a l l l l o d p j e a n n s g e o a - r o c p h e - n p s y e a r c h - d s l その後は、django_elasticsearch_dslとなっている箇所をdjango-opensearch-dslに、elasticsearch_dslをopensearchpyに書き換えることで、記事の通りに進めることができました。 ...

2023年6月19日 · 18 分 · Nakamura

Django REST framework で一括登録する

概要 Django REST framework で一括登録を行う方法を調べたので、その備忘録です。 以下の記事の通りに進めることで、一括登録用のエンドポイントを作成することができました。 https://qiita.com/Utena-lotus/items/c7bde7f663cfc4aabff1 Postman Postmanで以下のようなリクエストを送りました。 結果、以下のように、一括登録を行うことができました。 まとめ 参考になりましたら幸いです。

2023年6月17日 · 1 分 · Nakamura

djangoでJWTを使う(djangorestframework-simplejwt)

概要 djangoでJWTを使おうと思い、djangorestframework-jwtを使ってみました。 https://github.com/jpadilla/django-rest-framework-jwt 以下のサイトなどを参考にすすめてみました。 https://dev-yakuza.posstree.com/django/jwt/ ただし、‘rest_framework_jwt.authentication.JSONWebTokenAuthentication’を記述したところで、以下のエラーが発生しました。 I m p o r t E r r o r : c a n n o t i m p o r t n a m e ' s m a r t _ t e x t ' f r o m ' d j a n g o . u t i l s . e n c o d i n g ' 調べたところ、以下の記事が見つかりました。 ...

2023年6月17日 · 1 分 · Nakamura

Django REST framework JSON:API(DJA)に独自のモデルのビューをカスタマイズする

概要 以下の記事で追加したモデルのビューをカスタマイズしてみます。 sort ordering_fieldsを追加してみます。 c l a s s o q s d r u e e U d e r f s e r i e r y a g e i r r i s l e n f e I n e i t t t n g t z _ r e u f _ e o y n r r o f = r b _ t e n V i _ j p r t i e U c e k y u s e l s l c _ r u w d e a t = p n p s s r s ( k e e I s s s E r t = n e e i n ( ( f = l l s t ) M ( o f f r . o " . U ) . n y g d u o s : k o . e e s b e w t o t l e j r a b _ V r e I r N j o i _ c n g o e b e n t f s n c j w a s o . e t e S m . S g : s c e e a e e . t t " l r t g ( ) , l i ( e ) : ( a " t ) ) l e ( i n i # z t d e r = こ r y e こ _ n を p t 追 k r 加 " y , _ p N k o ) n . e b ) l o g 結果、「Filters」の表示で、user_nameのみが選択できるようになりました。 ...

2023年6月5日 · 5 分 · Nakamura

Django REST framework JSON:API(DJA)に独自のモデルを追加する

概要 以下の記事で、Django REST framework JSON:API(DJA)の基本的な操作方法を確認しました。 本記事では、DJAに独自のモデルを追加してみます。 参考 以下の記事を参考に、UserInfoモデルを追加してみます。 https://tech-blog.rakus.co.jp/entry/20220329/python 手順 モデルを定義 以下を追記します。 # c l ユ a ー s ザ s u b a c 情 s i g r 報 U e r e e を s r t a 格 e _ h = t 納 r n _ e す I a d m d る n m a o _ f e y d a o e t ( = = l B s = a m m . s o o P m e d d o o M e e s d o l l i e d s s t l e . . i s l C D v . ) h a e D : a t S a r e m t F F a e i i l T e e l i l l I m d d n e ( ( t F v v e i e e g e r r e l b b r d o o F ( s s i v e e e e _ _ l r n n d b a a ( o m m v s e e e e = = r _ ' ' b n ユ 生 o a ー 年 s m ザ 月 e e 名 日 _ = ' ' n ' , ) a 作 m m 成 a e 日 x = 時 _ ' ' l 年 , e 齢 a n ' u g , t t n o h u _ = l n 3 l o 2 = w ) T _ r a u d e d , = u T n r i u q e u ) e = F a l s e ) # # # ユ 生 ー 年 年 ザ 月 齢 名 日 データベースを構築 以下を実行します。 ...

2023年6月5日 · 11 分 · Nakamura

Django REST framework JSON:API(DJA)を試す

概要 Django REST framework JSON:API(DJA)を試す機会がありましたので、その備忘録です。 https://django-rest-framework-json-api.readthedocs.io/en/stable/index.html インストール 以下のページに記載があるexample appを起動します。 https://django-rest-framework-json-api.readthedocs.io/en/stable/getting-started.html g c p s p d d d i d y o i j j j t t u p a a a d h r n n n c j o c i g g g l a n e n o o o o n 3 s - - - n g e t a a a e o - n a d d d - m v l m m m h r / l i i i t e b n n n t s e i - p t n n U m l r s - v / r i o u : f a g a n / r e c r r d s / a n t e a d e g m v i q t a r i e v u e t v t w a i a e h o t r r u r e e - d b k m s r . - e e f - c j n t _ s o s t t e e m s i x t n . n a t d - t g m i j a x s p n a p t = l g n i e e s g x = o a e - m - x j p s a s l e m o e t p n . t l - s i e a e n . p t g s i t s e / i = t d n e t j g x i a s a n n m g g p s o l - e r . e s s e t t - t f i r n a g m s e w o r k - j s o n - a p i . g i t 結果、以下の画面などが得られました。 ...

2023年6月5日 · 3 分 · Nakamura