Amazon.co.jpで、パイオニアが展開するブランド「カロッツェリア」の「車載用Wi-FiルーターDCT-WR200D」がセール価格で購入できる。期間は21日まで。
編集部で確認したところ、13%オフの1万9800円で購入できる。
「DCT-WR200D」は、NTTドコモの自動車向け通信サービス「docomo in Car Connect」に対応。たとえばドコモで「365日プラン」(1万3200円)を契約すると、容量無制限でドコモのLTEデータ通信が使用できる。
Views: 0
Amazon.co.jpで、パイオニアが展開するブランド「カロッツェリア」の「車載用Wi-FiルーターDCT-WR200D」がセール価格で購入できる。期間は21日まで。
編集部で確認したところ、13%オフの1万9800円で購入できる。
「DCT-WR200D」は、NTTドコモの自動車向け通信サービス「docomo in Car Connect」に対応。たとえばドコモで「365日プラン」(1万3200円)を契約すると、容量無制限でドコモのLTEデータ通信が使用できる。
Views: 0
読者の反響が大きかった記事を再配信します。(記事初出時の公開日:2021年8月3日)
一流俳優や有名人には共通点があります。それは「声」。知名度のある人たちは、必ずと言っていいほど、自分の「声」とキャラとが一致し、セルフブランディングに「声」を生かしているのです。一流俳優と呼ばれる人の声の使い方を知り、あなたのセルフブランディングに役立てましょう。(声楽家・ボイストレーナー 清川永里子)
声でセルフブランディングするとはどういうことなのでしょうか。まずは俳優を思い浮かべ、どんな声だったか思い起こすことから始めましょう。
・阿部寛
4月に放送されたTBS系ドラマ「ドラゴン桜」で圧倒的な存在感を示した阿部寛さんは、高身長の方に多い、良く響く低い声の持ち主です。高身長の人は、声帯という声を作る筋肉が長いため、声も低くなる特徴があります。また、身長が高い分、演技の動きも大きくなりますが、そのような演技とイメージに合う声は、深くどっしりとした声なのではないでしょうか。まさに阿部さんは、高身長ゆえの声を生かしているといえるでしょう。
・福山雅治
若い頃から「イケメン」と言われ続けている福山さん。容姿端麗なのはもちろんですが、イケメン度をグッと上げているのが「声」です。特に鼻腔(鼻の奥)を共鳴させて出している、彼の独特の声が好きという女性は多く、その声は顔以上に、彼の魅力を引き出しているといえましょう。
Views: 0
食物アレルギーは皮膚炎などの皮膚疾患を持つ人に多く見られることが過去の研究で判明していました。イェール大学医学部が主導した皮膚と食物アレルギーに関する研究によって、食べたことのない食品を初めて口にするとき、皮膚に新しい切り傷などがあると食品に対するアレルギーを発症する可能性が高くなることが示されました。
Skin damage signals mediate allergic sensitization to spatially unlinked antigen | Science Immunology
https://www.science.org/doi/10.1126/sciimmunol.adn0688
Skin Injuries And Food Allergies May Have a Mysterious Connection : ScienceAlert
https://www.sciencealert.com/skin-injuries-and-food-allergies-may-have-a-mysterious-connection
2025年4月に免疫学の査読付き科学誌であるScience Immunologyに掲載された論文では、イェール大学で免疫生物学を研究するダニエル・A・ワイズマン氏やイェール大学医学部皮膚科のイザベラ・ブラウン・ソレル氏らが共同で、皮膚の損傷とアレルギーの関連について深堀りしています。
研究では、マウスを用いて皮膚に損傷を受けた直後に新しい食品を摂取したときの反応を調べています。結果として、皮膚に損傷を受けた直後に新しい食品を腸内に入れられたマウスは、その食品に対してアレルギー反応を起こすことが発見されました。
皮膚が損傷されると「体液性反応」と呼ばれる免疫反応が引き起こされます。細胞伝達物質のサイトカインによりB細胞が刺激されると、B細胞が形質細胞へと分化して大量の抗体を産生し、抗体は体液中を循環して全身に広がります。これにより、傷口からウイルスや毒素が入って傷が悪化したり体調を悪くしたりすることを防ぎます。
ワイズマン氏らの論文によると、サイトカインが引き起こす全身の抗体反応は、異なる部位から取り込まれた抗原に対してもアレルギー反応を引き起こすと考えられるそうです。つまり、皮膚を損傷した直後に食品を摂取すると、皮膚の損傷に反応した信号が、「今体に入った食品が問題」として認識されてしまうというわけ。研究者らはこれを「遠隔プライミング」と呼んでいます。
本来、感染や外敵から体を守るための抗原反応が、皮膚の傷と腸の食品という「空間的に離れた抗原」にも反応して食物アレルギーを形成しうるということが示されたのは、この論文が初めてです。皮膚の損傷と食物アレルギーの関連が観察されたのはマウスだけであり、人間でも同様に確認されるかは不明。研究者らは、特定の食品へのアレルギー反応を生じさせている他の細胞を特定することに取り組んでいます。
ワイズマン氏は「食物アレルギーを理解するには、腸が食べ物や飲み物に関してどのような寛容さを持っており、どうやってその寛容さが無視されて食物アレルギーが発生するのか、知る必要があります。こうしたことは必ずしも体の同じ場所で起こるわけではない、という考え方の変化が必要だと今回の研究で分かりました。異なる臓器系がどのように相互作用するかを詳しく調べる必要があります」と述べています。
この記事のタイトルとURLをコピーする
・関連記事
アレルギーはなぜ発生するのか?を分かりやすく解説したムービー – GIGAZINE
体内の免疫システムが病原体と戦う時に何が起きているのか、免疫システムを強化する最善策は何なのか? – GIGAZINE
人間の体内で毒にも薬にもなる謎のウイルス「バクテリオファージ」とは? – GIGAZINE
細菌やウイルスに対して免疫系はどのように戦っているのか? – GIGAZINE
指しゃぶりや爪かみといった「悪い習慣」にアレルギーを防ぐ力があるという研究結果 – GIGAZINE
調理が不十分なシイタケを食べた男性がムチに打たれたような発疹が出る「シイタケ皮膚炎」を発症してしまう – GIGAZINE
Views: 0
それはように見えます 暗殺者の信条の影実際に任天堂のスイッチ2に向かうかもしれませんが、それはほとんどエキサイティングな見通しですが、ゲームをプレイするための異常に圧倒的な方法でもあるかもしれません。 Switch 2で明らかにされたラインナップは、印象的なサードパーティポートをたくさん焦点を当てていましたが、Ubisoftの大きな公開は スターウォーズ無法者 最新のものではなく アサシンクリード タイトル。しかし、それは時間の問題かもしれません、そして アサシンクリード Switch 2に来ることは非常に理にかなっています。
Source link
Views: 0
Zines – 雑誌やファンジンの略 – は毎日人気が高まっています。私たちは、これらの執筆のこれらのコンパクトな作品の多くがitch.ioで発生するのを見てきましたが、それらは一貫して興味深いです…
Views: 0
本記事では、Oracle Database@AzureのOracle Autonomous Database (ADB)へ、Oracle Data Pumpを使用してデータ移行を行う方法を紹介します。
今回利用するADBの環境は、以下の記事と同様の手順で作成しています。
以下の図のように、Blob Storageにダンプファイルをアップロードし、Blob storageからOracle Database@Azure上のADBへダンプファイルを直接インポートしていきます。
事前準備として、まずは手元のPCにエクスポート済のダンプ・ファイルを用意します。
今回は、こちらのリンクの「はじめに」の章にある、以下の4つのダンプファイルを自身のPCにダウンロードしておきます。
以下の記事の環境が準備できている必要があります。
踏み台サーバーを構築して、RDP接続によりDatabase Actionsに接続できるようにしておきましょう。
BaseDBやExaDB-XSなどと比較して、ADBはOSに直接SSH接続できないので、ADBにアクセスするための準備をしていきます。
踏み台サーバーから、Oracle Instant Client ダウンロードページにアクセスして、最新バージョンのBasic Light Packageをダウンロードしていきます。
今回の例ですと、Version 23.7.0.25.01 > Base – one of these packages is required > Basic Light PackageのZipファイル (instantclient-basiclite-windows.x64-23.7.0.25.01)をダウンロードします。
その後、Zipファイルを任意のフォルダに展開しておきます。
今回は、以下のように展開しています。
例
「C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01
また今回はData Pumpを利用するので、追加でTools Packageもダウンロードしておきます。
今回の例ですと、Version 23.7.0.25.01 > Tools – optional packages > Tools PackageのZipファイル (instantclient-tools-windows.x64-23.7.0.25.01)をダウンロードします。
こちらのZipファイルも展開して、Toolsのinstantclientに入っているファイルをBasic Lightのinstantclientのフォルダの中にコピーします。
言語設定に関して
Windowsサーバーはデフォルトで英語になっているので、日本語が良い方は「Setting > Time & Language > Language & region」から、「Add a language」で日本語を追加して設定して、再起動すると日本語表示になります。
本記事でもここからは日本語設定で解説していきます。
踏み台サーバー上で、OCIコンソールのADBの画面を開き、「データベース接続」をクリックし、「インスタンスウォレット」を選択して、「ウォレットのダウンロード」を選択します。
その後、Zipファイルを任意のフォルダに展開しておきます。
今回は、以下のように展開しています。
例
C:UsersADBDownloadsWallet_OracleADB
Walletをダウンロードした直後は、「sqlnet.ora」に含まれるパスが相対参照 (?/network/admin)になっており、Instant Client環境では無効のパスです。
なので、まずはコマンドプロンプトでcdコマンドを使い、sqlnet.oraがあるフォルダまで移動し、以下のコマンドを実行して、sqlnet.oraの中身をメモ帳を使って書き換えていきます。
sqlnet.oraの中身をメモ帳で開く
notepad C:UsersADBDownloadsWallet_OracleADBsqlnet.ora
sqlnet.oraの初期状態では、以下のように記載されています。この状態では、ADBに接続することはできません。
✖ デフォルトのsqlnet.oraの中身
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH = no
なので、以下のようにsqlnet.oraの中身を書き換えてください。
DIRECTORYには、Walletファイルが格納されているフォルダの絶対パスを指定してください。
今回、私の場合だと「C:/Users/ADB/Downloads/Wallet_OracleADB」のパスになっています。
〇 書き換え後のsqlnet.oraの中身
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY = C:/Users/ADB/Downloads/Wallet_OracleADB)))
SSL_SERVER_DN_MATCH = yes
踏み台サーバー上で、スタートボタン横の検索窓に、「システムの詳細」と入力して、「システムの詳細設定の表示」を選択します。
「ユーザー環境変数」欄の中にある「Path」を選択し、「編集」をクリックします。
「新規」をクリックして、次のようにインストールしたInstant Clientのフォルダパスを追加します。
※フォルダの中の「instantclient_23_7」までを含めたパスになっていることに注意。
例
C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01instantclient_23_7
「OK」をクリックして、環境変数のPathの変更は完了です。
続いて、TNS_ADMINの設定として、同じく環境変数でWalletフォルダを指定していきます。
「ユーザー環境変数」欄で「*新規」をクリックします。
変数名と変数値 (Walletのパス)を以下のように入力していきます。
入力したら「OK」をクリックします。残った「環境変数」と「システムのプロパティ」のウィンドウも「OK」をクリックして閉じていきます。
変数値
C:UsersADBDownloadsWallet_OracleADB
実際に環境変数が有効になっているか、コマンドプロンプトを開いて以下のように入力します。
PATHの環境変数が有効になっているか確認
TNS_ADMINの環境変数が有効になっているか確認
実行結果
C:UsersADB>echo %PATH%
C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program Filesdotnet;C:UsersADBAppDataLocalMicrosoftWindowsApps;C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01instantclient_23_7;
C:UsersADB>echo %TNS_ADMIN%
C:UsersADBDownloadsWallet_OracleADB
%PATH% は Windowsの動作に必要なシステムフォルダも含まれるため、たくさん表示されても問題ありません。
デフォルトのWindowsサーバーでは、impdpの実行に必要なVisual C++ ランタイムがシステムに存在しないため、インストールしておく必要があります。
以下のページにアクセスして、「Visual Studio 2015, 2017, 2019, and 2022」のセクションから、x64のインストーラーをダウンロードします。
ストレージ アカウントとBlob Storage Containersを構築していきます。
まずは、Azureで画面上部の検索窓に「storage」と入力して、「ストレージ アカウント」を選択します。
「基本情報」に必要な情報を入力していきます。
入力し終わったら、「次へ」をクリックします。
プロジェクトの詳細
インスタンスの詳細
「詳細」に関しては、今回はデフォルトのままで問題ありませんので、「次へ」をクリックします。
「ネットワーク」も、今回はデフォルトのままで問題ありませんので、「次へ」をクリックします。
「データ保護」も、今回はデフォルトのままで問題ありませんので、「次へ」をクリックします。
「暗号化」も、今回はデフォルトのままで問題ありませんので、「次へ」をクリックします。
「タグ」に関しては、必要ならば追加してください。「次へ」をクリックします。
構成の概要が表示されますので、問題がなければ、「作成」をクリックします。
作成が終わるまで数分待機します。
画面左側の「データストレージ」⇒「コンテナー」を選択して、「+コンテナー」をクリックします。
コンテナーが作成されたら、そのコンテナーの名前をクリックします。
「アップロード」をクリックすると、画面右側にBLOBのアップロード画面が出てくるので、冒頭にダウンロードした4つのダンプファイルを選択します。最後に、青いボタンの「アップロード」をクリックすることで、ダンプファイルをBlob Storage上に配置することができました。
アップロードされたことを確認したら、右側の「…」をクリックして、「プロパティ」をクリックします。
4つダンプファイルで、記載のURLをコピーして記録していきます。
4つとも以下のような形式のURLになっていると思います。
URL例
https://adb.blob.core.windows.net/adb-container/export_hr_01.dmp
下準備が終わったので、ADBへData Pumpでインポートしていきます。
ADBからBlob Storageにアクセスするには、まず資格情報を作成する必要があります。
そのためには、Blob Storage上のダンプファイルにアクセスするためのアカウント名とパスワードが必要です。
先ほど作成したストレージアカウントに移動して、画面左側の「セキュリティとネットワーク」⇒「アクセスキー」選択します。
「ストレージアカウント名」と「キー」をコピーします。キーがパスワードになるので、「表示」をクリックするとキーをコピーできます。
次に、踏み台サーバーからADBのDatabase Actionsを開き、ADMINで「DBMS_CLOUD.CREATE_CREDENTIAL」を実行していきます。
Database Actionsへのアクセス方法は以下をご覧ください。
Database Actionsにアクセスできたら、画面左上のメニューを開き、「SQL」をクリックします。
まずは、画面左側のタブが「ADMIN」になっていることを確認します。
その後、以下のPL/SQL文を入力した後、「スクリプトを実行」をクリックし、正常に出力されたら資格情報の作成は完了です。
資格情報の作成
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'BLOBCRED',
username => '',
password => ''
);
END;
/
Blob Storageへのアクセステストを行っていきます。
DBMS_CLOUD.LIST_OBJECTS資格情報とURLを指定して実行することで、コンテナ内のファイルを一覧表示します。
URLに関しては、ダンプファイルをアップロードした際に、ダンプファイルのURLをコピーしたと思うので、そのURLの末尾のファイル名を削除してください。
URLの例
✖ https://samig1.blob.core.windows.net/contmig1/HR.DMP ⇚ ファイル名がいらない。
〇 https://samig1.blob.core.windows.net/contmig1/
先ほどと同様に、Database Actionsで以下のSQL文を入力した後、「文の実行」をクリックし、アップロードしたダンプファイルが出力されたらアクセステストは完了です。
Blob StorageへのアクセステストのSQL文
SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('BLOBCRED','');
踏み台サーバーで、インポート用のパラメータファイルを作成していきます。
コマンドプロンプトを起動して、CDコマンドで、Instant Clientと同じフォルダに移動し、以下内容を自身の内容に書き換えて入力します。
今回のフォルダは、「C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01instantclient_23_7」です。
他のパラメータの詳細については、Oracle Data Pump ベストプラクティスを参照してください。
パラメータファイルを作成するためのコマンド
echo DIRECTORY=DATA_PUMP_DIR> impdp.par
echo SCHEMAS=HR >> impdp.par
echo CREDENTIAL=BLOBCRED >> impdp.par
echo PARALLEL=1 >> impdp.par
echo DUMPFILE=https://adb.blob.core.windows.net/adb-container/export_hr_%U.dmp >> impdp.par
echo LOGFILE=blobimp.log >> impdp.par
echo EXCLUDE=cluster,indextype,db_link >> impdp.par
echo METRICS=y >> impdp.par
echo LOGTIME=all >> impdp.par
そして、実際にパラメータファイルが作られているか確認するために以下のコマンドで確かめます。
パラメータファイルの確認
パラメータファイルの内容
DIRECTORY=DATA_PUMP_DIR
SCHEMAS=HR
CREDENTIAL=BLOBCRED
PARALLEL=1
DUMPFILE=https://adb.blob.core.windows.net/adb-container/export_hr_%U.dmp
LOGFILE=blobimp.log
EXCLUDE=cluster,indextype,db_link
METRICS=y
LOGTIME=all
Instant Clientと同じフォルダで、以下内容を自身の内容に書き換えて入力します。
今回のフォルダは、「C:UsersADBDownloadsinstantclient-basiclite-windows.x64-23.7.0.25.01instantclient_23_7」です。
ちなみに、「TNSサービス名」に関しては、OCIコンソール上のADBの画面から確認することが可能です。今回は、「Oracleadb_high」を選択しますが、詳細に関してはこちらをご確認ください。
impdp admin/@ parfile=impdp.par
実行結果
Import: Release 23.0.0.0.0 - Production on Sat Apr 19 10:46:20 2025
Version 23.7.0.25.01
Copyright (c) 1982, 2025, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
19-APR-25 10:46:37.347: W-1 Startup on instance 3 took 2 seconds
19-APR-25 10:46:41.339: W-1 Master table "ADMIN"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
19-APR-25 10:46:42.335: Starting "ADMIN"."SYS_IMPORT_SCHEMA_01": admin/********@oracleadb_high parfile=impdp.par
19-APR-25 10:46:42.438: W-1 Processing object type SCHEMA_EXPORT/USER
19-APR-25 10:46:42.757: W-1 Completed 1 USER objects in 0 seconds
19-APR-25 10:46:42.757: W-1 Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
19-APR-25 10:46:42.852: W-1 Completed 7 SYSTEM_GRANT objects in 0 seconds
19-APR-25 10:46:42.852: W-1 Processing object type SCHEMA_EXPORT/ROLE_GRANT
19-APR-25 10:46:43.070: W-1 Completed 1 ROLE_GRANT objects in 1 seconds
19-APR-25 10:46:43.070: W-1 Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
19-APR-25 10:46:43.259: W-1 Completed 1 DEFAULT_ROLE objects in 0 seconds
19-APR-25 10:46:43.259: W-1 Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
19-APR-25 10:46:43.484: W-1 Completed 1 TABLESPACE_QUOTA objects in 0 seconds
19-APR-25 10:46:43.484: W-1 Processing object type SCHEMA_EXPORT/PASSWORD_HISTORY
19-APR-25 10:46:43.572: W-1 Completed 1 PASSWORD_HISTORY objects in 0 seconds
19-APR-25 10:46:43.790: W-1 Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
19-APR-25 10:46:43.942: W-1 Completed 3 SEQUENCE objects in 0 seconds
19-APR-25 10:46:43.942: W-1 Processing object type SCHEMA_EXPORT/TABLE/TABLE
19-APR-25 10:46:45.891: W-1 Completed 8 TABLE objects in 2 seconds
19-APR-25 10:46:45.916: W-1 Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
19-APR-25 10:46:47.117: W-1 . . imported "HR"."EMPLOYEES" 8.7 KB 107 rows in 0 seconds using external_table
19-APR-25 10:46:47.470: W-1 . . imported "HR"."LOCATIONS" 6 KB 23 rows in 0 seconds using external_table
19-APR-25 10:46:47.812: W-1 . . imported "HR"."JOB_HISTORY" 5.3 KB 10 rows in 0 seconds using external_table
19-APR-25 10:46:48.154: W-1 . . imported "HR"."JOBS" 5.4 KB 19 rows in 1 seconds using external_table
19-APR-25 10:46:48.497: W-1 . . imported "HR"."DEPARTMENTS" 5.4 KB 27 rows in 0 seconds using external_table
19-APR-25 10:46:48.923: W-1 . . imported "HR"."COUNTRIES" 5.2 KB 25 rows in 0 seconds using external_table
19-APR-25 10:46:49.258: W-1 . . imported "HR"."REGIONS" 4.9 KB 4 rows in 1 seconds using external_table
19-APR-25 10:46:49.277: W-1 . . imported "HR"."NG_TAB_4ADW" 0 KB 0 rows in 0 seconds using external_table
19-APR-25 10:46:49.288: W-1 Processing object type SCHEMA_EXPORT/TABLE/COMMENT
19-APR-25 10:46:49.515: W-1 Completed 39 COMMENT objects in 0 seconds
19-APR-25 10:46:49.515: W-1 Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
19-APR-25 10:46:49.619: W-1 Completed 2 PROCEDURE objects in 0 seconds
19-APR-25 10:46:49.619: W-1 Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
19-APR-25 10:46:49.811: W-1 Completed 2 ALTER_PROCEDURE objects in 0 seconds
19-APR-25 10:46:49.811: W-1 Processing object type SCHEMA_EXPORT/VIEW/VIEW
19-APR-25 10:46:50.034: W-1 Completed 1 VIEW objects in 1 seconds
19-APR-25 10:46:50.093: W-1 Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
19-APR-25 10:46:50.591: W-1 Completed 17 INDEX objects in 0 seconds
19-APR-25 10:46:50.591: W-1 Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
19-APR-25 10:46:50.935: W-1 Completed 9 CONSTRAINT objects in 0 seconds
19-APR-25 10:46:50.935: W-1 Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
19-APR-25 10:46:50.959: W-1 Completed 19 INDEX_STATISTICS objects in 0 seconds
19-APR-25 10:46:50.959: W-1 Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
19-APR-25 10:46:51.321: W-1 Completed 10 REF_CONSTRAINT objects in 1 seconds
19-APR-25 10:46:51.321: W-1 Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
19-APR-25 10:46:51.489: W-1 Completed 2 TRIGGER objects in 0 seconds
19-APR-25 10:46:51.489: W-1 Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
19-APR-25 10:46:51.513: W-1 Completed 8 TABLE_STATISTICS objects in 0 seconds
19-APR-25 10:46:51.543: W-1 Completed 1 [internal] STATISTICS objects in 0 seconds
19-APR-25 10:46:51.635: W-1 Completed 8 SCHEMA_EXPORT/TABLE/TABLE_DATA objects in 3 seconds
19-APR-25 10:46:51.743: Job "ADMIN"."SYS_IMPORT_SCHEMA_01" successfully completed at Sat Apr 19 10:46:51 2025 elapsed 0 00:00:24
最後に、実際にデータ移行ができているか確認するために、Database Actionsで確認してみます。
例として、以下のコマンドで、HRスキーマのCOUNTRIES表の件数を見てみます。25件であれば大丈夫です!
HRスキーマのCOUNTRIES表の件数確認
select count(1) from hr.COUNTRIES;
今回は、Oracle Database@AzureのADBへData Pumpによる移行作業を実施しました。
他にもOracleのマルチクラウドに関する記事を発信しているので、以下の関連記事も合わせてご参考ください。
Oracle Database@Azureに関して
Oracle Database@AWSに関して
Oracle Database@Googleに関して
Views: 0
Codex のソースコードを調査する機会があったので、どなたかの参考になればと思いコードリーディング時のメモを記事にしました!
OpenAI Codex CLI は、OpenAI によって開発されたオープンソースのターミナルベースの AI コーディングエージェントです。
詳細は以下の README.md を参照ください。
また、Codex 全体の依存関係は以下のようになっています。
蛇足ですが、この図は GitDiagram というツールで出力しています。
Github URL の “hub” を “diagram” に置き換えることで、該当のリポジトリの依存関係を可視化できます。
例) https://github.com/openai/codex
→ https://gitdiagram.com/openai/codex
Codex CLI にリクエストが送られてから処理が完了するまでの大まかな流れは以下の通りです。
codex-cli/src/app.tsx
によって初期画面がレンダリングされます。AgentLoop
クラスの run
メソッドが呼び出され、AI モデルとの対話処理が開始されます。AgentLoop
内で OpenAI API が呼び出され、モデルからの応答がストリーミングで受信されます。shell
や container.exec
)を要求した場合、handleExecCommand
関数が対応するコマンドをローカル環境で実行します。apply_patch
が指定されている場合は、ファイルへの変更が適用されます。codex-cli/src/app.tsx
ファイルにて、Codex CLI の初期画面がレンダリングされます。
TerminalChat
コンポーネント内の agentRef
(useRef
で管理される AgentLoop
インスタンスへの参照) を経由して、AgentLoop
クラスの run
メソッドが呼び出されます。
AgentLoop.run()
メソッドがエージェントの実行を担当します。run(input, previousResponseId)
は非同期メソッドであり、ユーザーからの入力を受け取り、新しい OpenAI API リクエストを発行します。
AgentLoop
クラス内で OpenAI API が呼び出され、モデルからの応答を処理します。
API リクエスト:
this.oai.responses.create({..., stream: true, input: turnInput, tools: [...]})
を呼び出し、モデルの応答をストリーミングで受信します。
for await (const event of stream)
ループ:
response.output_item.done
イベント:
item.type === "function_call"
の場合、pendingAborts.add(callId)
で処理を保留します。stageItem(item)
を呼び出し、UI への表示を予約します。response.completed
イベント:
stageItem
で順次表示します。lastResponseId
を更新し、this.onLastResponseId(id)
を介して次ターンの追跡に使用します。processEventsWithoutStreaming
を呼び出して同期的にツールを実行し、ファイル変更などの皇族の処理を開始します。システムプロンプト:
毎回の LLM リクエストには、以下のシステムプロンプトが設定されます。
const prefix = `You are operating as and within the Codex CLI, a terminal-based agentic coding assistant built by OpenAI. It wraps OpenAI models to enable natural language interaction with a local codebase. You are expected to be precise, safe, and helpful.
You can:
- Receive user prompts, project context, and files.
- Stream responses and emit function calls (e.g., shell commands, code edits).
- Apply patches, run commands, and manage user approvals based on policy.
- Work inside a sandboxed, git-backed workspace with rollback support.
- Log telemetry so sessions can be replayed or inspected later.
- More details on your functionality are available at `codex --help`
The Codex CLI is open-sourced. Don't confuse yourself with the old Codex language model built by OpenAI many moons ago (this is understandably top of mind for you!). Within this context, Codex refers to the open-source agentic coding interface.
You are an agent - please keep going until the user's query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved. If you are not sure about file content or codebase structure pertaining to the user's request, use your tools to read files and gather the relevant information: do NOT guess or make up an answer.
Please resolve the user's task by editing and testing the code files in your current code execution session. You are a deployed coding agent. Your session allows for you to modify and run code. The repo(s) are already cloned in your working directory, and you must fully solve the problem for your answer to be considered correct.
You MUST adhere to the following criteria when executing the task:
- Working on the repo(s) in the current environment is allowed, even if they are proprietary.
- Analyzing code for vulnerabilities is allowed.
- Showing user code and tool call details is allowed.
- User instructions may overwrite the *CODING GUIDELINES* section in this developer message.
- Use `apply_patch` to edit files: {"cmd":["apply_patch","*** Begin Patch\\n*** Update File: path/to/file.py\\n@@ def example():\\n- pass\\n+ return 123\\n*** End Patch"]}
- If completing the user's task requires writing or modifying files:
- Your code and final answer should follow these *CODING GUIDELINES*:
- Fix the problem at the root cause rather than applying surface-level patches, when possible.
- Avoid unneeded complexity in your solution.
- Ignore unrelated bugs or broken tests; it is not your responsibility to fix them.
- Update documentation as necessary.
- Keep changes consistent with the style of the existing codebase. Changes should be minimal and focused on the task.
- Use `git log` and `git blame` to search the history of the codebase if additional context is required; internet access is disabled.
- NEVER add copyright or license headers unless specifically requested.
- You do not need to `git commit` your changes; this will be done automatically for you.
- If there is a .pre-commit-config.yaml, use `pre-commit run --files ...` to check that your changes pass the pre-commit checks. However, do not fix pre-existing errors on lines you didn't touch.
- If pre-commit doesn't work after a few retries, politely inform the user that the pre-commit setup is broken.
- Once you finish coding, you must
- Check `git status` to sanity check your changes; revert any scratch files or changes.
- Remove all inline comments you added as much as possible, even if they look normal. Check using `git diff`. Inline comments must be generally avoided, unless active maintainers of the repo, after long careful study of the code and the issue, will still misinterpret the code without the comments.
- Check if you accidentally add copyright or license headers. If so, remove them.
- Try to run pre-commit if it is available.
- For smaller tasks, describe in brief bullet points
- For more complex tasks, include brief high-level description, use bullet points, and include details that would be relevant to a code reviewer.
- If completing the user's task DOES NOT require writing or modifying files (e.g., the user asks a question about the code base):
- Respond in a friendly tune as a remote teammate, who is knowledgeable, capable and eager to help with coding.
- When your task involves writing or modifying files:
- Do NOT tell the user to "save the file" or "copy the code into a file" if you already created or modified the file using `apply_patch`. Instead, reference the file as already saved.
- Do NOT show the full contents of large files you have already written, unless the user explicitly asks for them.`;
日本語訳(deepl):
あなたは、OpenAIによって構築された端末ベースのエージェント型コーディングアシスタントであるCodex CLIとして、またその中で操作しています。OpenAIのモデルをラップし、ローカルのコードベースとの自然な言語対話を可能にします。あなたは、正確で、安全で、役に立つことが期待されています。
実行可能な操作:
- ユーザーからのプロンプト、プロジェクトのコンテキスト、ファイルを受け取ります。
- 応答をストリームし、関数呼び出し(例:シェルコマンド、コード編集)を発行します。
- パッチの適用、コマンドの実行、ポリシーに基づくユーザー承認を管理します。
- ロールバックをサポートした、サンドボックス化されたgit管理下のワークスペース内で作業します。
- セッションを後で再生したり検査したりできるように、テレメトリログを記録します。
- 機能についての詳細は、`codex --help`を参照してください。
Codex CLIはオープンソースです。過去にOpenAIによって構築された古いCodex言語モデルと混同しないでください。この文脈では、Codexはオープンソースのエージェント型コーディングインターフェースを指します。
あなたはエージェントです。ユーザーの問い合わせが完全に解決するまで処理を続けてください。問題が解決したと確信した場合にのみ、ターンを終了してください。ユーザーの要求に関連するファイルの内容やコードベースの構造について確信が持てない場合は、ツールを使ってファイルを読み、関連情報を収集してください。推測や不確かな回答は避けてください。
現在のコード実行セッションでコードファイルを編集し、テストすることで、ユーザーのタスクを解決してください。あなたはデプロイされたコーディングエージェントです。セッション内でコードを修正し、実行できます。リポジトリはすでに作業ディレクトリにクローンされており、回答が正しいとみなされるためには、問題を完全に解決する必要があります。
タスク実行時には、以下の基準を厳守しなければなりません:
- 現在の環境のリポジトリでの作業は、それがプロプライエタリなものであっても許可されます。
- コードの脆弱性分析は許可されます。
- ユーザーコードとツール呼び出しの詳細表示は許可されます。
- ユーザーの指示は、この開発者メッセージの *CODING GUIDELINES* セクションを上書きする場合があります。
- ファイル編集には `apply_patch` を使用してください: 例: `{"cmd":["apply_patch","*** Begin Patch\\n*** Update File: path/to/file.py\\n@@ def example():\\n- pass\\n+ return 123\\n*** End Patch"]}`
- ユーザーのタスク完了にファイルの書き込みや変更が必要な場合:
- コードと最終回答は、以下の *CODING GUIDELINES* に従ってください:
- 可能な限り、表面的なパッチ適用ではなく、根本原因から問題を解決してください。
- ソリューションに不必要な複雑さを加えないでください。
- 関係のないバグや壊れたテストは無視してください。修正はあなたの責任ではありません。
- 必要に応じてドキュメントを更新してください。
- 変更は、既存のコードベースのスタイルと一貫性を保ってください。変更は最小限にし、タスクに集中してください。
- 追加のコンテキストが必要な場合は、`git log` や `git blame` を使用してコードベースの履歴を検索してください。インターネットアクセスは無効です。
- 特に要求されない限り、著作権やライセンスのヘッダーを追加しないでください。
- 変更を `git commit` する必要はありません。これは自動的に行われます。
- `.pre-commit-config.yaml` が存在する場合、`pre-commit run --files ...` を使用して変更がpre-commitチェックをパスするか確認してください。ただし、触れていない行の既存のエラーは修正しないでください。
- 何度か試してもpre-commitが失敗する場合は、pre-commit設定が壊れていることをユーザーに丁寧に伝えてください。
- コーディングが完了したら、必ず以下を実行してください:
- `git status` をチェックして変更内容を確認し、不要なファイルや変更を元に戻してください。
- 追加したインラインコメントは、通常のコメントに見えても可能な限り削除してください。`git diff` で確認してください。インラインコメントは一般的に避けるべきですが、リポジトリのアクティブなメンテナーが、コードと問題を注意深く検討した結果、コメントなしではコードを誤解する可能性がある場合は例外です。
- 誤って著作権やライセンスヘッダーを追加していないか確認してください。もしあれば削除してください。
- pre-commitが利用可能であれば実行を試みてください。
- 小規模なタスクについては、簡潔な箇条書きで説明してください。
- より複雑なタスクの場合は、簡単な概要説明を含め、箇条書きを使用し、コードレビュアーに関連する詳細を含めてください。
- ユーザーのタスク完了にファイルの書き込みや修正が必要ない場合(例:ユーザーがコードベースについて質問した場合):
- 知識が豊富で有能、かつコーディングの手助けに意欲的なリモートチームメイトとして、友好的な口調で応答してください。
- タスクにファイルの書き込みや変更が含まれる場合:
- `apply_patch` を使用してファイルを作成または修正した場合は、「ファイルを保存してください」や「コードをファイルにコピーしてください」とユーザーに指示しないでください。代わりに、ファイルが既に保存されていることを示してください。
- ユーザーが明示的に要求しない限り、既に書き込んだ大きなファイルの全内容を表示しないでください。
システムプロンプト内の ファイルを編集するには、「apply_patch」を使用してください: ...
という指示により、LLM がファイル変更を行う際には apply_patch
ツールを選択するように誘導されます。これにより、Codex CLI は安全かつ制御された方法でファイルを変更できます。
LLM の推論が完了し、ストリーミングイベント (stream.event
) の応答ステータスが completed
になった後、モデルが関数呼び出し(Function Call)を要求した場合、AgentLoop
の handleFunctionCall
メソッドが呼び出されます。
Function Calling によるシェルコマンド実行時のレスポンス例:
プロンプト「hw.py
に’hello world’を出力するスクリプトを作成して」に対するストリーミングイベントの function_call
タイプのレスポンスは以下のようになります。
Agent は arguments に入っているコマンドを実行します。
{
id: "fc_68035326b0f48192bd269fbf6a1664ba0a42a2da1e6c3655",
type: "function_call",
status: "completed",
arguments: `{"command":["echo","'print(\\"hello world\\")'","|","tee","hw.py"]}`,
call_id: "call_dhv65Km5z02IcbTz45ErEffF",
name: "shell",
};
handleFunctionCall
内で、呼び出されたツール名 (name
) が "container.exec"
または "shell"
の場合、handleExecCommand
メソッドが呼び出され、arguments
で指定されたコマンドがローカル環境で実行されます。
handleExecCommand
の内部で、さらに execCommand
関数が呼び出されます。
apply_patch
であれば、execApplyPatch
関数 が呼び出されてパッチ形式でのファイル変更が行われます。apply_patch
でない場合、exec
関数 が呼び出され、指定されたシェルコマンドが実行されます(これによりファイルが変更される場合もあります)。Codex CLI は、基本的にベストエフォートで例外を捕捉し、可能な限り自然にフォールバックすることで、CLI の継続的な稼働を最優先に設計されています。
AgentLoop
の主要な処理(例: run
メソッド内)は try/catch
で囲まれています。
try {
} catch (err) {
this.onItem({
id: `error-${Date.now()}`,
type: "message",
role: "system",
content: [
{ type: "input_text", text: `⚠️ エラーが発生しました: ${err.message}` },
],
});
this.onLoading(false);
return;
}
ERR_STREAM_PREMATURE_CLOSE
のようなストリーム通信中の予期せぬ切断なども捕捉され、ユーザーにエラーメッセージとして通知されます。handleExecCommand
は、ツール(シェルコマンドなど)の実行結果を処理し、その成功・失敗に関わらず安定した結果を AgentLoop
に返すように設計されています。
子コンポーネント (rawExec
) のエラー処理:
handleExecCommand
の内部で呼び出される rawExec
関数 は、コマンド実行を担当します。この関数は、例えば実行ファイル名が不正であるといった致命的な呼び出しミスが発生した場合でも、例外をスローせず、必ず解決(resolve)する Promise
を返します。
エラーが発生した場合、exitCode
が非ゼロ(通常は 1)で、stderr
にエラーメッセージが含まれた ExecResult
オブジェクトが返されます。
この設計により、ツール実行時の内部的なエラーが原因で CLI 全体がクラッシュすることを防ぎます。AgentLoop
から見ると、「ツール呼び出し自体は成功したが、実行結果としてエラー(非ゼロの終了コード)が返ってきた」という扱いになります。
handleExecCommand
での結果整形:
handleExecCommand
は rawExec
からの結果(ExecCommandSummary
)を受け取り、convertSummaryToResult
関数を使用して AgentLoop
が扱いやすい形式 (HandleExecCommandResult
) に整形します。
function convertSummaryToResult(
summary: ExecCommandSummary
): HandleExecCommandResult {
const { stdout, stderr, exitCode, durationMs } = summary;
return {
outputText: stdout || stderr,
metadata: {
exit_code: exitCode,
duration_seconds: Math.round(durationMs / 100) / 10,
},
};
}
AgentLoop
内では、この整形された結果 (outputText
と metadata
) を受け取り、次ターンの入力として LLM に渡すために、function_call_output
アイテムとして再度ラップします。この際、出力は JSON 文字列化されます。
const { outputText, metadata } = await this.handleExecCommand(...);
const outputItem: ResponseInputItem = {
type: "function_call_output",
call_id: item.call_id,
name: item.name,
output: JSON.stringify({ output: outputText, metadata }),
};
turnInput.push(outputItem);
rawExec
でエラーが発生しても、metadata
内に exitCode: 1
やエラーメッセージ (stderr
の内容が outputText
に入る) が含まれた状態で outputItem
が生成されます。モデルへのフィードバックと再応答:
handleExecCommand
から返された結果(エラー情報を含む場合もある)は、turnInput
配列に追加されます(上記 turnInput.push(outputItem);
)。turnInput
は、processEventsWithoutStreaming
メソッドの戻り値となり、最終的に AgentLoop.run
メソッドの次のイテレーションで OpenAI API へのリクエストに含められます。
private async processEventsWithoutStreaming(
): PromiseArrayResponseInputItem>> {
if (this.canceled) {
return [];
}
const turnInput: ArrayResponseInputItem> = [];
for (const item of output) {
if (item.type === "function_call") {
const result = await this.handleFunctionCall(item);
turnInput.push(...result);
}
}
return turnInput;
}
if (event.response.status === "completed") {
const newTurnInput = await this.processEventsWithoutStreaming(
event.response.output,
stageItem,
);
turnInput = newTurnInput;
}
より詳しく知りたい方はぜひソースコードをぜひ読んでみてください!
この記事がどなたかの参考になれば幸いです!
Views: 0
江戸時代は社会保障制度がほとんど整備されていなかったこともあり、現在と比べて格段に障がい者に対して厳しい世界であったと考えている人は多いです。
しかし一方で、大河ドラマの中で描写されているように裕福な生活を送っている視覚障がい者もわずかながらいました。
果たして江戸時代の視覚障がい者はどのような生活を送っていたのでしょうか?
この記事では江戸時代の視覚障がい者がどのように生計を立てていたのかについて紹介していきます。
なおこの研究は、原田信一(1997)『近世の座頭にみる職業素描』駒澤大学文学部社会学科研究報告29巻p. 121-145に詳細が書かれています。
目次
江戸幕府は、士・農・工・商という四民に加え、穢多・非人などの賤民、そして僧尼や神官と並ぶ特殊な身分を設定し、民衆を職業や役割により厳格に区分・統制していたことは知られています。
その中で、視覚障がい者は百姓などといった従来の身分から抜け出し、寺社奉行の管轄下で特別な法的扱いを受ける存在であったのです。視覚障がい者たちは当道座(とうどうざ)という自治的互助組織に所属していました。
視覚障がい者たちは琵琶や三味線の演奏や鍼灸を行い、それで生計を立てていたのです。
なお当道座に所属することができるのは男性の視覚障がい者だけであり、女性の視覚障がい者は瞽女座(ごぜざ)という自治的互助組織に所属して芸能活動を行っていました。
このように江戸時代の視覚障がい者は芸能に従事している人が多かったですが、その理由としては古くからの伝統が挙げられます。
というのも平安時代中期には琵琶法師と呼ばれる琵琶を演奏して生計を立てる盲目の僧侶の芸人が生まれており、それ以降芸能は視覚障がい者の主な生計の立て方として捉えられるようになりました。
また幕府による保護があったこともあり、視覚障がい者の中には貸金業に従事する者も多くいました。
しかし、やがてその貸付行為は、厳格な取立てと高利貸業へとエスカレートします。
幕府は、当道座の自治を認め、死罪に相当する重犯罪に対しても座法に基づいた処断を行うなど、一見温情的な措置を講じていました。
これにより、時には武士や町人との金銭トラブルを引き起こす事態も発生したのです。
たとえばある旗本があまりの金利の高さに借金を返済することができなくなり、突如として江戸から失踪するという事件が起こったりしています。
このような貸金業に対する保護があったのは、社会的弱者になりやすい視覚障がい者たちに対する救済措置という面もありますが、高位の官職を得るための資金を蓄えやすくするという面もありました。
というのも当時の当道座の中には検校(けんぎょう)を最高位とする厳然たるヒエラルキーがあり、視覚障がい者たちは73もの位階に分かれていました。
そのため視覚障がい者たちは少しでも上の位階に就くために日々精進していたのです。
もちろん先述した音楽や鍼灸に励むことによって出世を目指す人も多くいましたが、当然視覚障がい者の全員がこれらの才能に恵まれているわけではなく、それゆえ貸金業で手っ取り早く資金を調達して出世を目指す人も決して少なくなかったのです。
なお視覚障害は遺伝とはほとんど関係ないということもあって、これらの出世レースに世襲の要素が絡むことはほとんどなく、それゆえ検校は全員叩き上げでした。
加えて幕府は株仲間を通じた通貨統一や、直轄の鉱山・鋳造権を背景に、全国的な経済統制を進める中で、座頭の金銭取引にも手厚い保護を与えたのです。
こうした施策は、徳川体制の確固たる封建秩序と中央集権的な統制の一環として、各身分の相互扶助や官職昇進の仕組みと深く連動していました。
結果として、検校の金貸業は単なる金銭取引を超え、江戸時代の政治・経済構造を象徴する重要な制度として、その存在感を強く残すこととなったのです。
しかしこのような時代は長く続きません。
正徳二年(1712年)八月三十日、幕府は惣検校に対し官金取締令を発し、視覚障がい者による官金貸付の実態に厳しい目を向けることとなりました。
短期の貸借契約、礼金・早利といった高利貸、返済の強要や公的訴訟の濫用などを取り締まり、「座頭共詰させ、不作法成仕形」に対しては速やかな逮捕を命じる厳格な措置が示されたのです。
これは、武士に対する高利負債救済の必要性に迫られ、浪人や町人の資金が仲介業に流入していた現状への対応でもありました。
さらに、鳥山検校(とりやまけんぎょう)をはじめとする視覚障がい者の高利貸しの資産家の台頭が顕著となり、高利貸しに起因する社会問題が一層深刻化していたことも理由として挙げられます。
これにより鳥山ら暴利をむさぼっていた検校は官位をはく奪された上当道座から追放され、江戸からも物理的に追放されました。
障がい者というとどの時代も歴史の陰で静かに生きていたイメージを持つ人も多いですが、江戸時代には健常者以上に目立つ活躍をした視覚障がい者も多くいたことが窺えます。
参考文献
近世の座頭にみる職業素描
https://komazawa-u.repo.nii.ac.jp/records/2006548
ライター
華盛頓: 華盛頓(はなもりとみ)です。大学では経済史や経済地理学、政治経済学などについて学んできました。本サイトでは歴史系を中心に執筆していきます。趣味は旅行全般で、神社仏閣から景勝地、博物館などを中心に観光するのが好きです。
編集者
ナゾロジー 編集部
Views: 0