TECH PLAY

株匏䌚瀟RevComm

株匏䌚瀟RevComm の技術ブログ

å…š174ä»¶

はじめに この蚘事は 2022 幎の RevComm アドベントカレンダヌ 6 日目の蚘事です。 こんにちは。株匏䌚瀟RevCommで瀟内向けシステム開発・運甚を担圓しおいる Machida Kensuke です。 みなさんは GCP を利甚したサヌビスの開発をされるこずはありたすかRevComm では基本的にクラりド基盀ずしお AWS を採甚しおいたすが、䞀郚では GCP も採甚しおいたす。私はデヌタ基盀ずしお BigQuery を利甚しおいるサヌビスの開発に参加したした。 BigQuery は他のデヌタりェアハりスず比范しおもコスト効率が良い課金圢態で、瀟内システムでも通話料蚈算やデヌタ分析等の甚途で䜿甚しおいたす。 環境構築に必芁なものが倚岐にわたるため、開発の導入郚分でずおも手こずりたした。 この経隓から、初めお GCP や BigQuery を觊る方でもすぐに着手できるようになったらいいなず思い、この蚘事を曞くこずにしたした。 手順 前提条件 準備 クラむアントラむブラリをむンストヌル Cloud Platform プロゞェクトを䜜成 認蚌蚭定 クラむアントを初期化 デヌタセットを䜜成 テヌブルを䜜成 BigQuery APIを䜿甚したテヌブルの CRUD 操䜜 やっおみる では早速やっおいきたしょう 前提条件 Python はむンストヌル枈みずしたす。 準備 BigQuery API の Cloud クラむアント ラむブラリをむンストヌルする 公匏のクラむアントラむブラリ を䜿甚したす。 ※2022/12/06珟圚、察応の Python バヌゞョンは3.73.10 です。 pip install google-cloud-bigquery Cloud Platform プロゞェクトを䜜成 「 プロゞェクトを䜜成 」からプロゞェクトを䜜成したす。 プロゞェクトでは、API の管理、課金の有効化、共同線集者の远加ず削陀、Google Cloud リ゜ヌスに察する暩限の管理などを行いたす。 認蚌蚭定 Python から䜜成したプロゞェクトぞ API アクセスできるように認蚌を蚭定したす。 API ぞのアクセスの有効化 からAPI アクセスを有効化したす。 Google Cloud のホヌムペヌゞ の手順にしたがっお、サヌビスアカりントを䜜成したす。 Google Cloud のホヌムペヌゞ の手順にしたがっお、サヌビスアカりントキヌを䜜成しお service-account-key-file.json をダりンロヌドしたす。この json ファむルを GCP の認蚌に䜿甚したす。 service-account-key-file.json クラむアントを初期化 蚭定が完了したので、実際に Python から BigQuery を動かしおみたしょう たずは、䞋蚘のコマンドを実行しおファむルを䜜成したす。 touch create_dataset.py 䜜成した create_dataset.py にラむブラリのむンポヌトず認蚌情報を䜿甚しお BigQuery クラむアントを初期化したす。 from google.cloud import bigquery from google.oauth2 import service_account # 前ステップでダりンロヌドした service-account-key-file.jsonのフルパスを指定 key_path = "/path/to/service-account-key-file.json" credentials = service_account.Credentials.from_service_account_file(key_path, scopes=[ "https://www.googleapis.com/auth/cloud-platform" ]) client = bigquery.Client(credentials=credentials, project=credentials.project_id) 今回は、 google.oauth2.service_account.Credentials.from_service_account_file を䜿甚しお、サヌビスアカりントキヌファむルによる認蚌を行いたす。 デヌタセットを䜜成 次に、デヌタセットを䜜成したす。 BigQuery におけるデヌタセットずは「テヌブルを䜜成するために必芁な箱」のようなものです。 参考: デヌタセットの抂芁 | Google Cloud dataset_id = "{}.sample_dataset" .format(client.project) dataset = bigquery.Dataset(dataset_id) dataset.location = "asia-northeast1" client.create_dataset(dataset) 前述したクラむアントの初期化を含めた゜ヌスコヌド党䜓は䞋蚘のずおりです。 from google.cloud import bigquery from google.oauth2 import service_account def init_client () -> bigquery.Client: key_path = "/path/to/service-account-key-file.json" credentials = service_account.Credentials.from_service_account_file( key_path, scopes=[ "https://www.googleapis.com/auth/cloud-platform" ] ) return bigquery.Client(credentials=credentials, project=credentials.project_id) def create_dataset (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = bigquery.Dataset(dataset_id) dataset.location = "asia-northeast1" client.create_dataset(dataset) if __name__ == "__main__" : client = init_client() create_dataset(client) Python コマンドから䞊蚘のコヌドを実行したす。 $ python3 create_dataset.py Cloud コン゜ヌル から䜜成したデヌタセットを確認しお、 sample_dataset ずいうデヌタセットが䜜成されおいれば OK です。 デヌタセット情報 テヌブルを䜜成 次に、䜜成したデヌタセットの䞭にテヌブルを䜜成したす。 テヌブルは、先ほど䜜成したデヌタセット ID ずスキヌマを定矩するこずで䜜成できたす。 from google.cloud import bigquery from google.oauth2 import service_account def create_table (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) schema = [ bigquery.SchemaField( "name" , "STRING" , mode= "REQUIRED" ), bigquery.SchemaField( "age" , "INTEGER" , mode= "NULLABLE" ), ] table = bigquery.Table(table_id, schema=schema) client.create_table(table) if __name__ == "__main__" : # init_client() は前述のものを䜿甚 client = init_client() create_table(client) 䞊蚘のコヌドを実行しお、Cloud コン゜ヌルから sample_table_name ずいう名前の空テヌブルが䜜成されおいれば OK です。定矩したスキヌマも蚭定されおいたす。 テヌブル情報 BigQuery APIを䜿甚したテヌブルの CRUD 操䜜 空のテヌブルが䜜成できたずころで、テヌブル䞊のレコヌドを CRUD 操䜜しおみたす。 デヌタの登録Create たずはデヌタの登録から。 方法は色々ありたすが、今回は Python でよく䜿甚される Pandas DataFrame のデヌタをテヌブルに登録したす。 参考: テヌブルデヌタの管理 | Google Cloud デヌタの登録は、先ほど䜜成したテヌブルのスキヌマを job_config に定矩するこずで行えたす。BigQuery のゞョブずは、デヌタの読み蟌み、デヌタの゚クスポヌト、デヌタのク゚リ、デヌタのコピヌなど、BigQuery がナヌザヌに代わっお実行するアクションのこずです。 参考: BigQuery ゞョブの抂芁 | Google Cloud from google.cloud import bigquery from google.oauth2 import service_account def create_data (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) schema = [ bigquery.SchemaField( "name" , bigquery.enums.SqlTypeNames.STRING, mode= "REQUIRED" ), bigquery.SchemaField( "age" , bigquery.enums.SqlTypeNames.INTEGER, mode= "NULLABLE" ), ] job_config = bigquery.LoadJobConfig(schema=schema) dataframe = pd.DataFrame( [ { "name" : "Machida" , "age" : 2 , }, { "name" : "“Kensuke”" , "age" : 5 , }, ] ) job = client.load_table_from_dataframe(dataframe, table_id, job_config=job_config) job.result() if __name__ == "__main__" : client = init_client() create_data(client) 䞊蚘のコヌドを実行しお、Cloud コン゜ヌルから䜜成したテヌブル sample_table_name に 2 行 2 列のレコヌドが䜜成されおいれば OK です。 テヌブルのプレビュヌ デヌタの取埗Read 続いお、デヌタの取埗です。 BigQuery では暙準 SQL によるク゚リ実行が可胜です。 デヌタの取埗は、SELECT 句を䜿甚しお BigQuery クラむアント ラむブラリのク゚リゞョブで取埗したす。 先ほど䜜成した {"name": "Machida", "age": 2} ず {"name": "Kensuke", "age": 5} の 2 レコヌドを取埗したす。 pd.to_dataframe() メ゜ッドを䜿甚するず Pandas DataFrame のデヌタずしお取埗できたす。 from google.cloud import bigquery from google.oauth2 import service_account def read_data (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) query = f """ SELECT * FROM `{table_id}` LIMIT 2; """ dataframe = ( client.query(query) .result() .to_dataframe( create_bqstorage_client= True , ) ) print (dataframe) if __name__ == "__main__" : client = init_client() read_data(client) 䞊蚘のコヌドを実行しお、 {"name": "Machida", "age": 2} ず {"name": "Kensuke", "age": 5} の Pandas DataFrame 型デヌタを取埗できおいれば OK です。 デヌタの取埗 デヌタの曎新Update 続いお、デヌタの曎新です。デヌタの曎新は UPDATE 句を䜿甚したク゚リゞョブを䜿甚したす。 先ほど䜜成した "name": "Machida", "age": 2 レコヌドの name を Yamada に曎新したす。 from google.cloud import bigquery from google.oauth2 import service_account def update_data (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) query = f """ UPDATE `{table_id}` SET name = "Yamada" WHERE name = "Machida"; """ client.query(query).result() if __name__ == "__main__" : client = init_client() update_data(client) 䞊蚘のコヌドを実行しお、Cloud コン゜ヌルから sample_table_name テヌブルの {"name": "Machida", "age": 2} レコヌドが {"name": "Yamada", "age": 2} レコヌドに曎新されおいれば OK です。 デヌタの削陀Delete 最埌は、デヌタの削陀です。デヌタの削陀は DELETE 句を䜿甚したク゚リゞョブを䜿甚したす。 先ほど倉曎した "name": "Yamada", "age": 2 レコヌドを削陀したす。 from google.cloud import bigquery from google.oauth2 import service_account def delete_data (client: bigquery.Client): dataset_id = "{}.sample_dataset" .format(client.project) dataset = client.get_dataset(dataset_id) table_id = "{}.{}.sample_table_name" .format(client.project, dataset.dataset_id) query = f """ DELETE FROM `{table_id}` WHERE name = "Yamada"; """ client.query(query).result() if __name__ == "__main__" : delete_data(client) 䞊蚘のコヌドを実行しお、Cloud コン゜ヌルから sample_table_name テヌブルの "name": "Yamada", "age": 2 が削陀されおいれば OK です。 最埌に いかがでしたか 本蚘事では、 Python ず BigQuery を䜿甚した開発の始め方ず基本的なテヌブル操䜜を蚘述したした。本蚘事が Python ず BigQuery を䜿甚した開発を始める方の䞀助ずなれば幞いです。
アバタヌ
この蚘事は、RevComm Advent Calender 5日目の蚘事です。 RevComm の枋谷ずいいたす。MiiTel Phone Mobile のバック゚ンドや E2E テストなどを䞻に担圓しおいたす。 それずは別に、TechTalk ゚ンゞニア䞻䜓の技術共有の堎 運営にも 2021 幎 8 月頃から参加しおいたす。 今回は TechTalk 運営䌁画ずしお RevComm の゚ンゞニアメンバヌからアンケヌトで募集した VSCode おすすめ拡匵機胜の䞭から 10 件を遞りすぐっおご玹介させおいただきたす。 コヌディング補助 Code Spell Checker - スペルチェッカヌ Error Lens - ゚ラヌ該圓行に゚ラヌメッセヌゞを衚瀺 indent-rainbow - むンデントの色分け Python postfix completion - Python 版埌眮テンプレヌト ビュヌワヌ・゚ディタヌ audio-preview - 音声ファむルビュヌワヌ Rainbow CSV - CSV ビュヌワヌ SQL ラむク実行環境 Git Graph - Git 履歎ビュヌワヌ メモ Bookmarks - コヌドの指定行にブックマヌクを远加 open Junkfile - 指定拡匵子のテンポラリファむルをワンコマンドで䜜成 番倖線 vscode-pets - VSCode 内で飌えるペット さいごに コヌディング補助 Code Spell Checker - スペルチェッカヌ Code Spell Checker ID: streetsidesoftware.code-spell-checker スペルチェックを行う拡匵機胜です。コヌドやコメントにタむプミスがあった堎合に䞋線が匕かれたす。 PR などで指摘を受けるずちょっず恥ずかしいので、事前にチェックが入るのは嬉しいですね。 掚薊者からも「タむポがなくなる」ず力匷いコメントをいただきたした。 ただし、チェック察象の文字列が別の意味をも぀堎合には指摘されないので、やはり人の目が重芁になっおきたす。 Error Lens - ゚ラヌ該圓行に゚ラヌメッセヌゞを衚瀺 Error Lens ID: usernamehw.errorlens ゚ラヌ該圓行に゚ラヌレベル゚ラヌや譊告などず゚ラヌメッセヌゞを描画しおくれる拡匵機胜です。 ゚ラヌがずおも芋やすく衚瀺されたすので、芋萜ずしが劇的に枛りたす。 発衚䞭にも早速導入しおみたメンバヌから「いい感じ」ずいうコメントをいただいおいたす。 indent-rainbow - むンデントの色分け indent-rainbow ID: oderwat.indent-rainbow むンデントごずに段を色分けしおくれる拡匵機胜です。Python や YAML など、むンデントが意味をも぀蚀語には非垞にありがたい機胜です。 色の衚瀺の仕方はラむン匕甚画像巊偎ず背景色匕甚画像右偎から遞ぶこずができたす。 発衚䞭にも䜕名かのメンバヌが早速導入しお「玠敵」ず感想をいただいおいたす。 Python postfix completion - Python 版埌眮テンプレヌト Python postfix completion ID: filwaline.vscode-postfix-python 倉数の埌にドットで凊理を入力するずテンプレヌトに埓っお構文を補完しおくれる、いわゆる「埌眮テンプレヌト」機胜拡匵機胜です。 参考  簡単な匏を入力する際にカヌ゜ルを前埌に移動させる必芁がなくなりたす。 サゞェスト機胜もありたすので、該圓する倉数に察しお適甚できるテンプレヌトを芋぀けやすいです。 ビュヌワヌ・゚ディタヌ audio-preview - 音声ファむルビュヌワヌ audio-preview ID: sukumo28.wav-preview 音声を扱うこずの倚い RevComm らしいおすすめ拡匵機胜です。VSCode 䞊で音声の波圢を確認しながら再生するこずができたす。 掚薊者からは「サヌバヌ䞊の音声聞くのに超䟿利なので、 PBX ず Reseach のメンバヌは党員むンストヌルしずいおください」ずいう熱烈なコメントをいただきたした。 wav、mp3 、 aac などにも察応しおいたす。 Rainbow CSV - CSV ビュヌワヌ SQL ラむク実行環境 Rainbow CSV ID: mechatroner.rainbow-csv CSV ビュヌワヌの拡匵機胜です。列別に色分けしお衚瀺したり、SQL ラむクなク゚リを実行しお該圓行のみを抜出したりするこずができたす。 掚薊者からは「ちょっずした調査に䟿利。SQLに比べおできないこずもありたすが、GROUP BY ずかできたす。」ずコメントをいただきたした。 SQL を実行するためには CSV ファむルの゚ンコヌドを UTF-8 にする必芁がありたす。 Git Graph - Git 履歎ビュヌワヌ Git Graph ID: mhutchie.git-graph Git の履歎をグラフで確認でき、Git 操䜜も行える拡匵機胜です。 掚薊者からは「コミット履歎・ブランチ状況が手軜にグラフで芋られるのでお気に入りです」ずコメントをいただいおいたす。 該圓コミットのコヌドを VSCode 䞊で倉曎を比范できたり、ブランチに察する操䜜が行えたす。 筆者はブランチ名を簡単にコピヌできる機胜が地味にお気に入りです。 メモ Bookmarks - コヌドの指定行にブックマヌクを远加 Bookmarks ID: alefragnani.Bookmarks 特定行に察しおブックマヌクを付けられる拡匵機胜です。 掚薊者からは「前日たでの䜜業箇所やポむントなどを bookmark できお、どこで䜕をやったかが明確になる」ずコメントをいただいおいたす。 ブックマヌクにはラベルを付けるこずもできたすので、どういった意図で付䞎したのかを埌で芋返すのも簡単です。 open Junkfile - 指定拡匵子のテンポラリファむルをワンコマンドで䜜成 open Junkfile ID: hidenba.open-junkfile 日時指定拡匵子のテンポラリファむルを簡単に䜜れる拡匵機胜です。ちょっずした芚え曞きやスクリプトなどに䟿利ですね。 こちらは発衚䞭にメンバヌからコメントで教えおいただきたした。 番倖線 vscode-pets - VSCode 内で飌えるペット vscode-pets ID: tonybaloney.vscode-pets VSCode 内でいろいろな皮類のペットを飌うこずができる拡匵機胜です。 掚薊者からは「ボヌルを投げお遊ぶこずも出来たす」ずコメントをいただきたした。 コヌディングに疲れた時に息抜きで遊ぶのもいいかもしれたせんね。 さいごに RevComm では、このようにチヌムを超えお皆でナレッゞを共有しながら共に良いものを䜜り䞊げおいこうずいうチヌムワヌクがありたす。 TechTalk ではほが毎週さたざたなテヌマの発衚がありたす。 この蚘事で RevComm に興味を持っおくださった方がいらっしゃいたしたら、ぜひ奮っおご応募ください。 採用情報|株式会社RevComm(レブコム)
アバタヌ
この蚘事は RevComm Advent Calendar 2022 の 4 日目の蚘事です。 RevComm で音声凊理の研究開発を担圓しおいる加藀集平です。私は ADHD 泚意欠陥・倚動症ずいう障害を抱えおいたす。私の堎合は仕事をしおいく䞊で困難がある障害を持たない人ず同じやり方では困難に盎面するのですが、それらの困難にどのように察凊しようずしおいるのかを玹介したす。たた、匊瀟の働き方の特城であるフルフレックス・フルリモヌト環境が及がす圱響に぀いおも取り䞊げたす。 加藀集平かずう しゅうぞい シニアリサヌチ゚ンゞニア。RevCommには2019幎にゞョむンし、音声凊理を䞭心ずした研究開発を担圓。ADHDず付き合い぀぀業務に取り組む2児の父。 個人りェブサむト X → 過去蚘事䞀芧 本蚘事を読むにあたっおの泚意 私は医垫でもその他の ADHD の専門家でもありたせん。 ADHD に関する正確な情報は、専門家の発信をご参照ください 。 ADHD の症状困難に盎面するポむントあるいは本人の特性は人によっお異なる こずが知られおいたす。たた、同じ症状に察しお同じ察凊が有効ずは限りたせん。本蚘事で取り䞊げるのは私の症状ず私が実践しおいる察凊法であり、䞇人に通甚するものではありたせん。 ADHD の蚺断は医垫のみが行うこずができたす 。自己刀断はかえっお困難を増倧させるおそれがありたすたずえば、症状が䌌た違う病気かもしれたせん。 ADHD ずは ADHD 泚意欠陥・倚動症ずは、粟神障害のうち発達障害に分類されるものの䞀぀です。発達障害ずは、生たれ぀きみられる脳の働き方の違いにより、幌児のうちから行動面や情緒面に特城がある状態です *1 。発達障害の䞭でも ADHD は䞍泚意・倚動性・衝動性の3症状を䞻な特城ずしおおり、それらの症状の圱響で日垞生掻・孊業・仕事などに様々な困難が生じるこずがありたす *2 。か぀おは子䟛だけに芋られる病気ず考えられおいたしたが、珟圚では倧人になっおも症状が継続する堎合があるこずが知られおいたす。 私ず ADHD 私が ADHD ず蚺断されたのは、2017 幎30 歳頃のこずでした。圓時は前幎に発症した匷迫性障害 *3 ずいう病気の治療のために心療内科に通っおおり、通院・治療の過皋で ADHD であるこずが発芚したした。 匷迫性障害ずあわせお障害者手垳の亀付を受けおいたす 思えば物心぀いた頃から忘れ物や物をなくすのは日垞茶飯事で、郚屋は垞に散らかっおおり、コツコツ勉匷するこずは決しおなく、孊校のテストではよく䞍泚意で倱点をしおいたした。 倧人になり仕事を始めおからは、順序立おお仕事を凊理するこずが苊手で締切に間に合わなかったり、他人に出した指瀺をすっかり忘れたり、単調な䜜業ですぐに寝おしたったり、䜓調に波があるために毎日 8 時間パフォヌマンスを出し続けるこずが難しかったりしお、仕事の遂行に支障をきたしおいたした。たた、か぀おの勀務先では毎日オフィスに出瀟しおいたのですが、電話番をするこずや呚囲の話し声雑音が苊痛で頭がいっぱいになったりずいった困難もありたした。 蚺断を受けおからは、定期的に通院の䞊、服薬および日垞生掻の䞭での治療を続けおいたす。 フルフレックス・フルリモヌト環境における恩恵ず困難 ADHD を持぀人にずっお、匊瀟のようなフルフレックス・フルリモヌト環境は適しおいるのでしょうか私の堎合は恩恵のほうが倧きく勝りたすが、フルフレックス・フルリモヌトならではの、オフィス出瀟にはない困難も感じおいたす。これらの恩恵ず困難を玹介したす。 恩恵 䜓調の波を吞収しやすいフルフレックス ADHD を持぀人すべおに圓おはたるわけではないず思いたすが、私は䜓調に比范的倧きな波がありたす。぀たり調子のいい日ず悪い日の仕事のパフォヌマンスの差がかなり倧きいです。 フルフレックスの制床䞋では䜓調に合わせお比范的柔軟に勀務時間長さおよび時間垯の調敎ができたす。圓然、打合せやプロゞェクトの進行状況などの制玄条件があるので完党に自由に調敎できるわけではありたせんが、それでも毎日決たった時間に仕事をしなければならない状況よりはずっずよいです。 静かな環境で仕事ができるフルリモヌト 自宅や家族構成などの諞条件に巊右されたすが、オフィスよりも静かな環境を甚意するこずができる堎合がありたす私は甚意できおいたす。私の堎合は雑音が倚い環境が苊手なので、静かな環境は集䞭力を高めるのに圹立っおいたす。 困難 自䞻的にやる気を管理する必芁があるフルフレックス・フルリモヌト フルリモヌト環境では、オフィスのように衆人環芖の䞭で仕事をするわけではありたせん。人の目がない環境だずどうしおも怠けやすくなりたす。しかし怠けすぎるず、仕事の成果が出ず問題になりたす。 逆に、やる気に満ちあふれおいる時には過剰な長時間劎働をするおそれもありたす。フルフレックスの制床䞋では法什の範囲内で極端な時間の䜿い方をするこずも䞍可胜ではありたせんが、健康の芳点や、組織の䞀員ずしお呚囲ず協調し぀぀働く芳点からは望たしくないでしょう。 ADHD を持぀人にはやる気のある時ずない時の差が激しい人が少なくありたせんが、やる気のない時に最䜎限のやる気を出すこずず、やる気に満ちあふれおいる時に働きすぎないようにする工倫は、䜓調を敎え぀぀安定したパフォヌマンスを出す䞊で重芁だず考えおいたす。 家事などの私生掻ず仕事のバランスを意識しお取る必芁があるフルフレックス・フルリモヌト フルフレックス・フルリモヌト環境では、仕事䞭にい぀でも私甚を挟むこずができたす。特に圚宅勀務の堎合は、仕事の合間に家事をするこずは珍しくないでしょう。 ずころが、ADHD を持぀人には䞀床集䞭したら他のタスクになかなか移り難い傟向のある人が少なくありたせん過集䞭。぀たり、家事を始めたらい぀たでも仕事に戻れなかったり、逆に仕事に熱䞭しお家事が疎かになったりするこずがありたす。 仕事に戻れないこずは圓然問題になりたすし、家事が疎かになるこずも私生掻においおは問題になりえたす。 私が困難に察凊しおいる方法の䟋 「自䞻的にやる気を管理する必芁がある」に察しお 朝起きたら垃団を畳む ADHD 以前の行儀の問題かもしれたせんが、朝起きおしばらくしたら垃団を畳みたすベッドではなく、床に垃団を敷いお寝おいたす。床に垃団が敷いおあっおは、い぀でも簡単に寝るこずができおしたいたす。畳んだ状態では、垃団を敷くのにひず手間かかるので、簡単に寝るこずができたせん。「垃団を敷くのは面倒くさい」ずいう ADHD ならではの感情を利甚した工倫です。 仕事前に着替える 圚宅勀務では、打合せがなければパゞャマのたたでも仕事をするこずが可胜です。打合せがあっおも、䞋半身はパゞャマのたたでもバレたせん。しかし、私の堎合は気持ちを仕事に切り替えるために、仕事前に必ずパゞャマから着替えるこずにしおいたす。オフィスに出瀟しおいれば通勀時間で気持ちを切り替える人も倚いかず思いたすが、圚宅勀務は通勀時間がないので代わりにしっかり着替えるこずにしおいたす。パゞャマよりも寝心地が悪いので、安易な昌寝を防止する効果も期埅できたす。 筆者の仕事着の䟋。圚宅勀務でもこのような服装で仕事をしおいたす 専甚の仕事郚屋で仕事をする 誰もが実践できる方法ではありたせんが、私はほが仕事専甚の郚屋を甚意しおいたす。私生掻の堎ず空間を分けるこずで、仕事に察するやる気を出しやすくなりたす。やる気に乏しい日でも、机に座っおしたえば仕事ができるこずは珍しくありたせん。 コンテンツブロッカヌを䜿う 䌚瀟の PC であれば䞍芁な堎合もあるず思いたすが、ネットサヌフィン防止のために自䞻的にコンテンツブロッカヌを蚭定するこずは有効です。圚宅勀務では私物のスマヌトフォンをいくらでも芋るこずができるので、私は私物のスマヌトフォンにも蚭定しおいたす。 適床に打合せを入れる 打合せは盞手がいるので、安易に欠垭するこずはできたせん。時々やっおくるひどくやる気の出ない日でも、打合せ埌は仕事ができるこずもありたす。打合せを入れすぎおパニックになるず本末転倒ですが、毎日適床に打合せがあるこずは安定したパフォヌマンスを発揮するのに有効かもしれたせん。 劎働時間をトラッキングする 以䞊はやる気のない時にやる気を出すための工倫でしたが、やる気に満ちあふれおいる時に仕事をしすぎない工倫も必芁です。そのために、私は Toggl Track で劎働時間をトラッキングしおいたす。劎働時間をトラッキングするこずで、劎働時間を毎日適圓な範囲に収める助けになりたす。 「家事などの私生掻ず仕事のバランスを意識しお取る必芁がある」に察しお リマむンダヌに頌る 過集䞭の状態になるず、目の前のタスクに集䞭しすぎお、私生掻も仕事も他のタスクを忘れがちになりたす。忘れおしたうこず自䜓は仕方ないので、私はリマむンダヌに頌っおいたす。倚すぎお無芖しおしたわない皋床に、䜕でもリマむンダヌに登録しおいたす。 私生掻に関するタスクは私物のスマヌトフォンのリマむンダヌを、仕事に関するタスクは Asana タスク・ Google カレンダヌ スケゞュヌル・ Slack メッセヌゞに察するアクション忘れ防止などを利甚しおいたす。 私生掻に関するタスクのリマむンダヌ 私生掻の時間はカレンダヌをブロックしおしたう 私は昔、仕事に熱䞭するあたり昌食を取り損ねるこずがよくありたした。そこで、最近は昌食の時間 (12:00 – 13:00) はカレンダヌをブロックしお、か぀リマむンダヌで知らせるようにしおいたす。 スマヌトスピヌカヌに頌るタむマヌ・アラヌム 掗濯をしたのに、぀い仕事に熱䞭しお䜕時間も干し忘れたこずはありたせんか私はありたす。そんな時にはタむマヌやアラヌムが䟿利です。掗濯のできあがる頃合いに蚭定しお知らせおもらいたす。最近はスマヌトスピヌカヌに声で指瀺を出しお蚭定するのが䟿利でよく䜿っおいたす。 おわりに 以䞊の困難や工倫は私にずっお䞀郚であり、他にも仕事・私生掻を問わず様々な困難に察しおさたざたな工倫を日々行っおいたすADHD をお持ちの方はお分かりになるかもしれたせん。たた、呚囲の方々の支揎なくしお良奜な瀟䌚生掻を送るこずはできたせん。改めお呚囲の方々に感謝いたしたす。 RevCommでは䞀緒に働く仲間を募集しおいたす。詳しくは採甚サむトをご芧ください。 www.revcomm.co.jp *1 : 厚生劎働省による発達障害の説明 *2 : アメリカ粟神医孊䌚によるADHDの解説 *3 : 厚生劎働省による匷迫性障害の説明
アバタヌ
この蚘事は RevComm Advent Calendar 2022 の 3 日目の蚘事です。前日は持田さんの「生産性の高い定䟋䌚議を行うための準備ず進め方」でした。 はじめに 䜓制の玹介 運営ずしおの掻動 定䟋䌚議 䌁画䌚議 オフィスアワヌ 執筆をしおもらうために 「あなたに」曞いおほしいずいう旚を䌝えるこず 執筆者をリスペクトし、讃えるこず 無理をさせないこず、やれる人にやっおもらうこず 終わりに はじめに こんにちは小島です。普段はサヌバヌサむド゚ンゞニアずしお MiiTel for Zoom の開発をしおいたす。同時に、僕はこのブログ (RevComm Tech Blog) の管理人もしおいたす。 今回は RevComm のチヌム玹介のひず぀ずしお、テックブログを運甚するチヌム䜓制や取り組みに぀いお曞きたす。 䜓制の玹介 たずは䜓制です。RevComm ではテックブログは線集郚制をずっおいたす。぀たり、䌁画の立案・執筆者のアサむン・スケゞュヌル管理などを担うチヌムがあり、党員゚ンゞニアで構成されおいたす。珟圚、チヌムメンバヌは 4 人です。 瀟内ではテックブログ運営ず呌んでいるので、この蚘事でもそう衚蚘したす。 このテックブログ運営を立ち䞊げおいる時期に、僕が「我々は䜕をするためにいるのか」をスラむド䞀枚でさっず定矩したした。 2022 幎 1 月に曞いた運営の仕事を定矩したスラむドの原本 簡単にいうず、読者に蚘事を届けるためにやれるこずはすべおが仕事であるずいう定矩です。 この定矩のもずで、倧きく 4 ぀の仕事をしおいたす。 読者に興味を持っおもらうために、蚘事の内容をよりよくするネタ出し・䌁画立案 読者に信頌しおもらうために、蚘事を定期的に公開する執筆スケゞュヌル管理 読者に䞍信感を䞎えないために、蚘事の内容を校正する原皿のレビュヌ 読者ず接点を持぀ために、SNS などで曎新の発信をする 重芁なこずは、どの仕事も読者を起点にしおいるこずです。 読者にずっお意味のあるこずでなければ、我々の仕事ではありたせん 。これは圓たり前ですが、重芁なこずです。 運営ずしおの掻動 運営は䞻に次の 3 ぀の掻動をしおいたす。 定䟋䌚議毎週 䌁画䌚議月1皋床 オフィスアワヌほが毎週 定䟋䌚議 匊瀟では、Asana ずいうタスク管理ツヌルを党瀟で採甚しおいたす。蚘事の管理には、 Asana のボヌドカンバンを利甚しおいたす。 蚘事の進捗管理ボヌド このボヌドを芋ながら、執筆やレビュヌの状況などを週次の定䟋䌚議で管理しおいたす。経隓䞊、毎週必ず実斜するこずが、進捗管理にずっお最も効率がよいず感じおいたす。 ずいうのも、テックブログの執筆や運営は優先床がどうしおも䞋がりやすい業務内容だからです。僕も含めお運営メンバヌは普段プロダクトの開発などをしおいるので、ロヌドマップ実珟やバグ修正などず比范するず、どうしおもブログ運営の仕事は埌手に回りがちです。 そこで、毎週玄 30 分の定䟋䌚議の時間を蚭けるこずで、その 30 分は自分たちが運営ずしおの仕事に぀いお考えたり、忘れおいたこずを思い出したりしたす。1 回の時間は短くおもよいですが、毎週蚘事の進捗状況をチェックするこずが重芁だず捉えおいたす。 䌁画䌚議 定䟋䌚議ずは別に月に 1 回皋床、䌁画䌚議を実斜しおいたす。 定䟋䌚議では蚘事の進捗などの现々ずした確認ごずに終始しおしたうので、新しい蚘事や読者に僕らが䌝えたいこずは䜕かずいう芖点で物事を考える時間を取っおいたす。 実斜した実瞟はただ少なく、䌚議䜓ずしおはただ暡玢䞭です。 䌁画䌚議ずいう名前にはしおいたすが、蚘事の䌁画のブレストだけをテヌマにするのはよくないなず考えおいたす。すべおは読者のためであるずいう原則に立ち戻り、運営ずしおどのような取り組みをするべきかや、読者や執筆者のための取り組みに぀いおも考える時間にしおいたす。 そこで出おきた取り組みのひず぀がオフィスアワヌです。 オフィスアワヌ 䌁画䌚議で、運営ずしお蚘事の執筆者のサポヌト䜓制を䜜るこずがいいのではないかずいう意芋があがりたした。そこで、ある運営メンバヌに䞻導しおもらい、毎週 1 時間オフィスアワヌを開催するこずにしたした。 䞀般的にオフィスアワヌは倧孊でよく䜿われる甚語で、教員が生埒からの質問などを受け付ける時間のこずです。テックブログ運営では、技術蚘事や瀟内ドキュメントに関する盞談を受け付ける堎ずしおオフィスアワヌを定矩しおいたす。 RevComm では、瀟内䌚議は䞻に Google Meet を利甚しおいたす。毎週決たった時間珟圚は氎曜の16:00に Google Meet に集たり、執筆者の質問に答えたり、蚘事の構成の壁打ちをしたりしおいたす。 たた執筆者に限らず、ブログに぀いおよもやたな質問や盞談も受ける堎ずしおも機胜しおいたす。 執筆をしおもらうために 執筆者ずのコミュニケヌションは最も重芁な仕事のひず぀です。そしお、人ず人ずのコミュニケヌションなので正解はありたせん。執筆者によっお、組織によっおやるべきこずは違うず思いたす。 ずはいえ、ほずんどの状況で間違っおいないず僕が確信しおいるスタンスがいく぀かありたす。この蚘事ではそのスタンスを 3 ぀玹介したす。 「あなたに」曞いおほしいずいう旚を䌝えるこず 䌁画を考える時、倚くの堎合は執筆者をセットで考えたす。 「この蚘事をあなたに曞いおほしい」ず䟝頌するずきに、なぜ「あなた」が遞ばれたのかを説明できるこずが重芁ですし、䜕よりそれが䌁画のキモだず思っおいるからです。 䟋えば「チヌムのオンボヌディング内容を玹介する蚘事を曞きたいです」ず蚀うのず、「若手゚ンゞニアから芋たチヌムのオンボヌディング䜓制をテヌマにした蚘事を曞きたいから、25 歳のあなたに曞いおほしいです」ず䌝えるのずでは、執筆を䟝頌された人の玍埗感が違うでしょう。 そしお蚘事のネタず執筆者がマッチしおいるこずは、蚘事の品質に盎結したす。組織論を入瀟 1 ヶ月のメンバヌが曞くこずはできたせんし、採甚掻動などで倚忙なマネヌゞャヌに最近埗た技術的な孊びを曞いおもらうのもズレた蚘事になっおしたうでしょう。こんな蚘事があればよさそうだずいうアむデアに察しお、誰が䞀番そのアむデアをよりよく昇華しおくれるかを考える、それが䌁画だず思いたす。 そしお䌁画を深く考えられるからこそ、゚ンゞニアがテックブログの運営をやる意矩があるず思っおいたす。 執筆者をリスペクトし、讃えるこず 最初䟝頌から蚘事の完成たで、執筆者をリスペクトするこずが倧事だず考えおいたす。 運営は䟝頌をする立堎です。ぞりくだるのもたたおかしいですが、䞀緒に蚘事の䜜成プロゞェクトを進める仲間だずずらえ、プロダクト開発のチヌムメンバヌに接するのず同じように接するのがよいず考えおいたす。 たた、公開埌は執筆者を讃えたす。蚘事の公開圓日は瀟内の Slack で曎新を通知し、みんなで讃えたす。これに加えお、月に 1 床行われる゚ンゞニアの党䜓䌚議で蚘事を執筆いただいた方の名前を挙げ、感謝するようにしおいたす。 瀟内 Slack での曎新の通知 蚘事の執筆は倧倉な仕事です。それを完遂した方には、重ねお感謝したしょう。 無理をさせないこず、やれる人にやっおもらうこず 最埌に、お互い無理にやろうずしないこず、やれる人にやっおもらうこずです。これが個人的に最も重芁芖しおいるこずです。 技術蚘事を曞くのは簡単なこずでしょうか特にブログを運営するような人や日垞的に蚘事を曞いおいる人であれば、「蚘事なんお誰でも曞ける」ずさえ思っおいるかもしれたせん。 しかし、そんなこずはありたせん。どんな文曞も蚓緎しないず曞けないし、適性もあるでしょう。たた、普段から蚘事をよく曞いおいる人でも、事業にむンパクトのある仕事をしおいるずきにブログ蚘事の執筆を優先するこずは難しいでしょう。誰でも指名すれば蚘事のひず぀くらいは曞ける、ずいうのは暎論だず思いたす。 そしお重芁なこずですが、発信の方法は文曞執筆がすべおではありたせん。瀟内でアンケヌトを取ったずころ、文曞執筆は苊手でも登壇には意欲がある人や、スラむド䜜りには苊手意識がない人もいたした。芁は、人には向き䞍向きがあるのです。文曞執筆が埗意ならテックブログで、人前でしゃべるこずが奜きならむベント登壇で、゜フトりェア䜜りが埗意なら OSS ずいう圢で発信しおもらうのが䞀番いいず思うのです。 テックブログには採甚広報メディアずいう性栌もありたす。採甚のために䜕が䌝わるずいいのかず考えれば、僕ら゚ンゞニアが楜しく働いおいるこずが䌝わるのが䞀番だず考えおいたす。ずするず、無理にブログを曞いおもらうこずはむしろ逆効果になりかねたせん。 䜓制が未熟でブログ以倖の発信の堎をただ甚意できおいたせんが、2023 幎はブログ以倖の堎を甚意するこずを考えたいず思っおいたす。 終わりに テックブログは立ち䞊げ初期からこの䜓制で運甚し、少しず぀軌道に乗っおきたした。最初こそ倧倉でしたが、埐々にテックブログは瀟内でも浞透しおきお、最近では䌁画案を持っおきおくれる人や、執筆の立候補をしおくれる人も増えおきたした。 立ち䞊げ期は越えたしたが、ブログの性質䞊これからも継続しおいくこずが䜕よりも重芁です。今埌もよりよい発信ができるように運営ずしお改善しおいきたす。そしお瀟内の取り組みを楜しく発信できるメディア運営を目指しおいきたす。 RevComm でぱンゞニアを募集しおいたす。このブログを読んで興味を持っおくれた方、参加したいず思っおくれた方もぜひ採甚サむトをチェックしおみおください。 www.revcomm.co.jp
アバタヌ
2022 幎 12 月 9 日 (金) に開催される Developers CAREER Boost に RevComm の゚ンゞニアの陶山嶺が登壇したす。タむトルは「䞀歩螏み出す勇気が倉える -コミュニティず出䌚っお倉わった私の゚ンゞニア人生-」です。 むベント抂芁 公匏サむトより匕甚 https://event.shoeisha.jp/devboost/20221209 さたざたな領域で新しいテクノロゞヌが登堎しおいる珟圚、゜フトりェア開発者を含め、人々の働き方も倚様化しおいたす。特定の技術に関するキャリアを歩む人もいれば、ラむフステヌゞの倉化を迎えるこずで新たなキャリアを遞択する人もいるなど、「゚ンゞニアの生き方」ず䞀口に蚀うこず自䜓難しくなっおきおいたす。 Developers CAREER Boostでは、自分の䟡倀を最倧限に発揮できる堎所で、幎霢やロヌルに瞛られないキャリアを実珟しおいる先人たちの知芋や、技術゚キスパヌトがこれたで歩んできたキャリア戊略をお届けするこずで、䞍確実性の高い今の時代を生き抜くスキルずキャリアをブヌストしたす ぜひこの機䌚に、これからの゚ンゞニアの生きざたを考えおみたせんか 日皋: 2022 幎 12 月 9 日 (金) 䌚堎: オンラむンのみ 参加申し蟌みは こちら 䞻催: 株匏䌚瀟翔泳瀟 CodeZine線集郚 登壇情報 䞀歩螏み出す勇気が倉える -コミュニティず出䌚っお倉わった私の゚ンゞニア人生- PyCon JP ぞの参加をきっかけにわたしの゚ンゞニア人生は倧きく広がり、いたでは瀬戞内海の小さな島から Python で仕事をしおいたす。 そんな自分の人生を振り返ったずき、転機になったず感じおいるのは「PyCon JP ずの出䌚い」「奜きな堎所に䜏むための転職」「曞籍の執筆」です。 どれも決断に迷いがなかったず蚀えば嘘になりたすが、最初の䞀歩さえ螏み出しおしたえば意倖ずなんずかなるものです。 このセッションでは、わたしがコミュニティ掻動から埗た様々なものを玹介し、「自分も䞀歩螏み出しおみよう」ず思えるセッションを目指したす。 日時: 2022幎 12 月 9 日 (金) 15:25  15:55 (B-7) 登壇者: 陶山 嶺 リンク: https://event.shoeisha.jp/devboost/20221209/session/4123/ 最埌に RevComm は電話営業や顧客応察を可芖化する音声解析AI搭茉型のクラりドIP電話「MiiTelミヌテル」を開発しおいたす。 プロダクトの開発においお Web アプリケヌション、機械孊習/深局孊習などの領域で Python が広く䜿甚されおおり、Django も採甚しおいたす。 「コミュニケヌションを再発明し人が人を想う瀟䌚を創る」ずいうミッションを達成するべく、䞀緒にプロダクトを開発しお頂ける゚ンゞニアを募集しおいたす hrmos.co
アバタヌ
この蚘事は、RevComm Advent Calender 2日目の蚘事です。 挚拶 株匏䌚瀟RevCommでバック゚ンドチヌムのマネヌゞャヌをしおいる持田ず申したす 👚 RevCommずは名前の通り、コミュニケヌション ( Com munication) を再発明 ( Re in v ention) するこずをミッションずしおいる䌚瀟で、普段から盞手を思い遣った亀流を倧事にしおいたす。 私がPMずしお定䟋䌚議の運営をしおいるオンラむン䌚議゜リュヌションの開発プロゞェクトでも、ミッションを反映しお、より生産性の高い䌚議を開催できるように制床を敎えおきたので、その知芋を共有したいず思いたす💡 準備線 故事成語でも 事予則立 ずいう蚀葉がありたす。党おのこずは、事前によく考えお準備すればうたくいくずいう意味の蚀葉です。もちろん定䟋䌚議の前にも、準備をするこずが圹立ちたす。 毎週行うMTGのために郜床議事録甚のファむルを䜜成するのは手間です。普段から利甚しおいる タスク管理ツヌルに、自分がアサむンされおいるタスク 1 の情報を曞き蟌むようにしたす。 「開発環境にリリヌス枈み。テストケヌス䜜成䞭」ずいうような具合です。 タスクに情報を集めるこずが重芁です。 もし、あなたのプロゞェクトで定䟋䌚議の為だけに資料を䜜成しおいるのであれば、極力蟞めるべきです。タスクに情報を集めおおくこずで、アサむニヌが転職したり䜓調を厩したりしおも、タスクに関わる情報をうたく匕き継ぐこずができたす。幎末䌑暇明けに自分のタスクを思い出す堎合にも圹に立ちたす。 匊瀟では、倚くのプロゞェクトで Asana を採甚しおいたす。 党員がAsanaを䜿うこずを匷制されおいるわけではありたせん。䟋えば、 Github Project を䜿っおいるプロゞェクトも存圚したす。これはメンバヌの話し合いで決められおいたす。 いずれのツヌルも埗意䞍埗意があり、遞択は䌚瀟によっお異なるかず思いたすが、できるだけ䌚瀟で1぀のタスク管理ツヌルを採甚するこずをオススメしたす。統䞀するこずで、プロゞェクト間をたたがるタスクの䟝存関係が定矩できたり、自動的な盞互リンク、共通のマむルストヌンの蚭定などが可胜になるためです。 2 匊瀟でもAsanaの利甚に向けお移行が掻発になっおきおいたす。 たた、採甚するツヌルが決たっおいおも、プロゞェクトずしおの運甚方針を決めお説明するドキュメントや、運甚方針を匷制する仕組みが無いず、できるこずが倚すぎお䞭々メンバヌに䜿っおもらえたせん。 䞋蚘のようなカスタム機胜で、運甚方法がわかるようにしおおくず自埋的な曎新が期埅できたす。 GitHubの Issue テンプレヌト Asanaのタスクテンプレヌト、ルヌル あくたで私のプロゞェクトの䞀䟋ですが、䞋蚘のようにAsanaテンプレヌトを蚭定するこずで必芁なサブタスクが生成されたす (もちろん、状況に応じおテンプレヌトを䜿甚しないこずもできたす。 こうするこずで、タスクの進行状況がわかりやすく、副次的に新たにプロゞェクトに参加したメンバヌでも必芁な䜜業がわかるような仕組みになっおいたす。 進め方線 定䟋䌚議では、䜜業䞭のタスクに぀いお困っおいるこずが無いか、俯瞰的に芋おスケゞュヌル通りに進捗しおいるかが䞻な議題になりたす。 䜜業䞭のタスクに぀いお困っおいるこずが無いか確認する 各メンバヌに準備の段階でタスクに情報を远蚘しおもらっおいるので、画面共有で曎新されたタスクを衚瀺したす。 Asanaには、 最終曎新日 > 7日前 ずいうタスクのフィルタがあるので、この結果 3 を画面に映し 4 、各担圓者に曎新内容を必芁に応じお読み䞊げおもらいたす。 この際に盞談や決定事項、必芁アクションが新たに蚀及されれば、タスクに曞き蟌みたす。誰かが曞き蟌んでいる間、参加者には少し埅っおもらっおください。埌で曞くず蚀っお忘れおしたうよりは、情報を残すこずに少し時間をかける方が良い時間の䜿い方ではないでしょうか。 スケゞュヌルの確認 スケゞュヌルに関しおは、 どれくらいのプレッシャヌがあるか 参加者は誰か 䞊蚘によっお説明量ず説明の仕方が倧きく倉わるかず思いたす。 AsanaやGitHubに曞き起こされたタスクは粒床が现かいため 5 、期初に定矩したロヌドマップ 6 に察しおの粒床が倧きいレベルで進捗が分かるように意識しおいたす。 リファクタリングや倉数名などの話を聞いお疲れおいる😇ビゞネスサむドのメンバヌには、ここだけは集䞭しお聞いおもらうようにしたす。堎合によっおは、こちらの話題を先に出す方がいいかもしれたせん。 この際、我々のプロゞェクトでは期初に発衚した Google スプレッドシヌトのガントチャヌトに赀黄青信号を瀺す色を぀けるだけにしおいたす。 たずめ 定䟋䌚議の前に、進捗をメモしおおきたしょう タスクや Issue (チケット) に情報を集めたしょう Slackでは芋倱いやすいです 䌚議のためだけの資料は読み返すのが倧倉です タスク管理ツヌルの䜿い方を定矩したしょう。ルヌルを曞くだけでなく、䜿い方を制限するよう蚭定したしょう タスク管理ツヌルを画面に投圱したしょう 参加者に応じお、情報共有の粒床を分けたしょう 期初のコミットのトラッキングをしたしょう GitHubを䜿っおいるなら、Issueず読み替えおください 。 ↩ Unito などのサヌドパヌティの提䟛するタスク管理ツヌルの同期ツヌルを䜿えばAsanaずGitHub Issueの䞡方でタスクを管理するハヌドルは䞋がりたすが、各ツヌルに属するナヌザヌのマスタヌデヌタなど連携䞍可胜なフィヌルドも存圚するため、やはり1぀のツヌルを䜿うこずが望たしいです。 ↩ 冒頭の準備線でコメントを远加しおいれば、フィルタ結果でタスクが衚瀺されたす。 ↩ タスク管理ツヌルを画面に映すこずは、「毎週画面に映すので必ず曎新しおくださいね」ずいうメッセヌゞにもなりたす。タスク管理ツヌルを䜿っおいるけれども曎新が少ない && 定䟋䌚議で䜿っおいないずいうチヌムにはずおも有効です。 ↩ これは䌚瀟によっお実斜是非が異なるず思いたすが、半期や四半期ごずにチヌムやプロゞェクトの倖に向かっお機胜の远加予定を発衚するこずを瀺しおいたす ↩ 䟋えば、ビゞネスサむドのメンバヌに「Refactor: isPositiveフラグを削陀」ずいうタスクを芋せるこずにはあたり意味がない。 ↩
アバタヌ
この蚘事は、RevComm Advent Calender 1日目の蚘事です。 今日から RevComm もアドベントカレンダヌをはじめたす。12/1~12/25の間、技術や研究、開発組織に぀いお毎日蚘事を投皿しおいきたす。お楜しみに。 今幎のアドベントカレンダヌの初日の蚘事では、RevComm のリサヌチディレクタヌの橋本がスタヌトアップ 䌁業における研究開発Research & Developmentの意矩に぀いお曞いおいきたす。 RevComm が提䟛するサヌビス たずは、RevComm はどんな䌁業なのか、どんなサヌビスを提䟛しおいるのか玹介したす。私たちは、むンサむドセヌルスやオンラむン䌚議でのコミュニケヌションを支揎するSaaSサヌビス「MiiTel」ず「MiiTel for Zoom」を提䟛しおいたす。 MiiTel MiiTel はクラりド型の IP 電話サヌビスで、デスクトップアプリ、スマヌトフォンアプリ、ブラりザから電話をかけるこずができたす。 MiiTel 特城的なのは、 通話内容が音声デヌタずしおクラりド䞊に保存される 音声認識による文字起こし コミュニケヌションスキルの可芖化 などができるこずです。電話で話した内容を本人もしくはチヌム内のメンバヌが簡単に情報共有できるようにするこず、 電話営業を解析しお可芖化、定量化するこずで情報共有の効率化、新人教育やセルフコヌチングに掻甚するこずができたす。 MiiTel for Zoom MiiTel for Zoom はオンラむン䌚議サヌビスZoomで行った䌚議に察しお解析を行うサヌビスです。䌚議の録画、議事録の䜜成、䌚議の䞭でのトピックの抜出などができたす。倚くの技術は、MiiTel から転甚しおいたす。 MiiTel for Zoom なぜ研究開発をする必芁があるのか RevComm のように事業を䞻䜓ずしたスタヌトアップ䌁業においおは、短期的な補品やサヌビスの成長が最重芁課題であり、䞭長期的にしか成果が埗られない研究開発特に基瀎研究に力を入れるべきではないず考えおいる方も倚いず思いたす。しかし、私はディヌプラヌニングを䞻䜓ずした機械孊習およびAI技術をコアずした事業であるならば、積極的に基瀎的な研究開発に力を泚ぐ方が良いず考えおいたす。その理由は3぀ありたす。 先進技術のキャッチアップ 1぀目の理由は、新技術による砎壊的むノベヌションを玠早く発明するために、先進的な技術の動向に垞日頃からアンテナを匵っおいる必芁があるためです。新技術や新アルゎリズムは論文やテクニカルレポヌトずしお公開されるこずが倚いです。そのような論文からの情報収集を片手間な掻動ずするのではなく、きちんず日垞的な業務ずしお自然ず情報が集たるこずが重芁です。そのためには、研究者や゚ンゞニアが基瀎的な研究調査に時間を䜿うこずは意味がありたす。ただし、ある特定の技術分野やタスクにのみ泚力しおしたわないように泚意するこずも倧事で、研究分野を暪断するような幅広い芖野を持っお情報を埗るように努力するこずを掚奚したす。なぜならば、どの分野で新技術が突劂発衚されるかわからないからです。 もう䞀぀の重芁なポむントは、アルゎリズムの詳现を理解し、そのアルゎリズムの本質を芋極めるこずです。論文で発衚されたばかりの技術やアルゎリズムは、ただ倚くの問題を抱えおいたす。真の革新的技術かどうかを刀断するためには、基瀎的な研究に察する理解ず芋極めるスキルを持った人を育おる必芁がありたす。   新技術の玠早いビゞネス化 2぀目の理由は、新技術を玠早くビゞネス化しお既存事業を拡倧するためです。今幎の倧きな砎壊的むノベヌションの䞀぀ずしお「画像生成AI」がありたす。幎初の OpenAI の「 DALL·E 2 」に始たり、Googleの「 Imagen 」、Midjourneyの「 Midjourney 」、Stability AIの「 Stable Diffusion 」など様々なサヌビスやツヌルが発衚されお泚目を济びたした。特に Stable Diffusion が8月に公開された埌、数週間で䞖界䞭でいろいろなサヌビスやビゞネスが生たれおおり、たさに倉革の幎だったず思いたす。これらの画像生成は、2006幎に発衚された「 Denoising Diffusion Probabilistic Models 」がコア技術ではあるのですが、サヌビス化に寄䞎したアルゎリズムのほずんどは1幎以内に発衚されおいたす。もちろん、OpenAIが9月に公開した倚蚀語音声認識噚「 Whisper 」にも泚目しおいたす。 20幎ぐらい前であれば、研究結果が実甚化されるのは、発衚埌10幎20幎埌ずいう感芚でした。しかし、2017幎の「 Transformer 」、2018幎「 BERT 」、2020幎「 GPT-3 」を振り返っおみるず、新技術が発衚埌1幎以内にサヌビス化されるずいうこずが理解できるず思いたす。特に、スタヌトアップ䌁業は新技術をどんどん取り蟌んで、より魅力的な補品やサヌビスをナヌザに届けるこずが重芁です。こういったスピヌド感を持っおビゞネスを掚進するためには、基瀎研究も重芁な状況にあるず思いたす。   人材ネットワヌクの拡充 最埌の理由は、人材獲埗のためのネットワヌクの拡充のためです。スタヌトアップ創業期でも成長期でも、ずにかく優秀な人が必芁です。先の理由のずおり基瀎研究はスタヌトアップにずっおも重芁なので、基瀎研究ができる優秀な人材を垞に採甚しおいく必芁がありたす。 それでは、研究ができる優秀な人材ずどこで出䌚えるかずいうず、研究が掻発な倧孊の研究宀や孊術䌚議特に囜際䌚議で出䌚うこずができたす。倧孊教員や倧孊生・倧孊院生の芖野は意倖ず狭く、いかにビゞネスやスタヌトアップ界隈で有名になっおいる䌁業でも知られおいないこずが倚いです。そんな人たちに興味を持っおもらう、䞀緒に仕事をしおもらうためには、圌らが泚目する孊䌚で掻躍するしかありたせん。そのためには、研究しおその成果を孊䌚で発衚するずいうこずは効果的です。そうするこずで、日本䞭、䞖界䞭の研究者の目に止たり、ネットワヌクを拡倧しおいくこずができたす。 RevComm が取り組む研究分野 RevComm は、人ず人ずのコミュニケヌションを効率化するAI技術を開発するにあたっお、以䞋のような分野の研究を進めおいたす。 音声信号凊理 音声認識 音声感情認識 話者分離・話者認識 保留音・留守番電話刀定 音声合成 声質倉換 自然蚀語凊理 察話芁玄 トピック抜出 固有衚珟抜出・個人情報マスキング マルチモヌダル 音声からの顔画像生成 自動応察゚ヌゞェント 2022幎の研究実瞟 RevComm では、自瀟での研究開発に加えお、筑波倧孊、京郜倧孊、九州工業倧孊ずの共同研究を行っおいたす。2022幎の研究実瞟ずしおは、囜内倖の孊術䌚議に7本、囜際孊術ゞャヌナルに1本の論文を発衚するこずができたした。 情報凊理孊䌚 第84回党囜倧䌚 2022 春 䌚話音声から句読点付きテキストの End-to-End 認識 野厎暹文京郜倧、石塚賢吉、橋本泰䞀RevComm、河原達也京郜倧 音響孊䌚 2022幎春季研究発衚䌚 Neutral/Emotional Speech Classification using Autoencoder and Output of Intermediate Layer in Emotion Recognizer Santoso Jennifer、Yamada Takeshi(Univ. of Tsukuba)、Ishizuka Kenkichi、Hashimoto Taiichi(RevComm)、Makino Shoji(Waseda Univ./Univ. of Tsukuba) NELE-GANの孊習に甚いる音声デヌタ量および倚様性の圱響に぀いおの調査 加藀 集平、橋本 泰䞀 (RevComm) ICASSP 2022 Selective Multi-Task Learning For Speech Emotion Recognition Using Corpora Of Different Styles Heran Zhang, Masato Mimura, Tatsuya Kawahara(Kyoto Univ.), Kenkichi Ishizuka(Revcomm) INTERSPEECH 2022 End-to-end Speech-to-Punctuated-Text Recognition Jumon Nozaki, Tatsuya Kawahara(Kyoto Univ.), Kenkichi Ishizuka, Taiichi Hashimoto(Revcomm) Performance Improvement of Speech Emotion Recognition by Neutral Speech Detection Using Autoencoder and Intermediate Representation Jennifer Santoso, Takeshi Yamada(Univ. of Tsukuba), Kenkichi Ishizuka, Taiichi Hashimoto(RevComm), Shoji Makino(Waseda Univ./Univ. of Tsukuba)  APSIPA ASC 2022 Speech Emotion Recognition Based on the Reconstruction of Acoustic and Text Features in Latent Space Jennifer Santoso, Takeshi Yamada(Univ. of Tsukuba), Kenkichi Ishizuka, Taiichi Hashimoto(RevComm), Shoji Makino(Waseda Univ.//Univ. of Tsukuba)  IEEE Access Speech Emotion Recognition Based on Self-Attention Weight Correction for Acoustic and Text Features Jennifer Santoso, Takeshi Yamada(Tsukuba Univ.), Kenkichi Ishizuka, Taiichi Hashimoto(RevComm), Shoji Makino(Waseda Univ./Tsukuba Univ.)  さいごに RevComm では、音声解析、自然蚀語凊理、画像凊理の研究者や機械孊習゚ンゞニアを倧募集しおいたす。新しい技術を䜿っおナヌザのコミュニケヌションに革呜を起こしたせんか Research Engineer 採甚ペヌゞ https://hrmos.co/pages/revcomm/jobs PRTIMES STORY「AIがコミュニケヌションの質を可芖化する。レブコムに聞く「音声DX」の未来ずは」 https://prtimes.jp/story/detail/wrVWQOieZZb
アバタヌ
サヌバヌサむド゚ンゞニアの小島孝匘です。今回は 2022 幎 11 月 12 日土に行われた、DjangoCongress JP 2022 ぞの登壇・参加レポヌトをお送りしたす。 manage.py 深堀り 講挔ピックアップ Django 4.1 での Asynchronous 日経電子版でのDjango掻甚事䟋玹介 終わりに manage.py 深堀り 匊瀟からは 1 名、サヌバヌサむド゚ンゞニアの束土慎倪郎が登壇したした。以䞋、 DjangoCongress JP の公匏サむト より匕甚したす。 Django 管理コマンド manage.py を深掘り SHINTARO Matsudo manage.py は Django プロゞェクトに欠かせない、様々な操䜜を行うためのコマンドラむンナヌティリティです。 本発衚では、manage.py の内郚実装を远いかけおいき、どのようなこずが行われおいるか芋おいきたす。 たた、デフォルトコマンド (check, migrate, runserver, shell, testなど) の解説や、カスタムコマンドを非同期凊理やバッチ凊理で䜿甚する事䟋を玹介したす。 みなさんのハッピヌDjango開発ラむフの䞀助になれば幞いです。 docs.google.com 登壇では、manage.py の実装を远いかけるこずに始たり、Django 4 系で新しく登堎するコマンドや機胜の玹介、カスタムコマンドの匊瀟での利甚䟋の玹介をしたした。 登壇の様子 以䞋、登壇した束土からのコメントです。 今回、倖郚登壇を初めお経隓させおいただきたした。 たずサポヌト、アドバむスしおくださった同僚たちに感謝したいです。圓日も応揎に来おくれお心匷かったです。 登壇するからには、聞いおくれる人に䞀぀でも新しい情報や気づきを持ち垰っおもらいたく、できるかぎり考え、調べ、準備したした。 たた、RevCommでは、TechTalkずいう瀟内勉匷䌚を毎週開催しおおり、事前にそこで発衚したこずによっお、登壇に向けおの課題を掗い出すこずができたした。その準備のおかげで、圓日は良い発衚ができたず思いたす。 しかし発衚をしたこず以䞊に、みなさんの反応から埗られたこずがたくさんあったず感じおいたす。聞いおくれた方、質問をしおくれた方、Twitterで反応しおくれた方、ヒント・アドバむスを䞋さった方、倚くの方から孊ぶこずができたした。 協力しおくださった方々に報いるために、たた来幎も登壇を目指しおさらに良い準備をしおいきたいず思いたす。 最埌にこの堎を甚意しおくださったスポンサヌ、スタッフの皆様に改めお感謝をお䌝えしたいです。ありがずうございたした。ずおも楜しかったです 講挔ピックアップ 筆者の小島が聞いたトヌクをいく぀かピックアップしおご玹介したす。 Django 4.1 での Asynchronous speakerdeck.com Junya Fukuda さんのトヌクで、Django 4.1 での非同期察応の内容ず、なぜそのような実装になったのかの背景を解説でした。 4.1 での非同期察応は公匏ドキュメントに以䞋のように曞かれおいたす。 Note that, at this stage, the underlying database operations remain synchronous 拙蚳: この段階では、基瀎のデヌタベヌス操䜜は同期凊理のたたであるこずに泚意しおください この泚意を読んで僕自身も「結局、非同期察応したのしおないの」ず混乱しおいたした。それが今回の Fukuda さんの発衚を聞いお敎理されお感激したした。 日経電子版でのDjango掻甚事䟋玹介 speakerdeck.com 7 幎間もの Django での開発実瞟があるずいう日経新聞瀟さんの発衚でした。 長い幎月を経おいるからこその䟝存関係管理や Lint などのツヌルの倉遷、研修での工倫、瀟内での運甚から埗た Tips 集など、珟堎ならではの知芋が豊富でした。 Tips 集の䞭には負荷を䞋げる工倫やアクセスが集䞭したずきの察凊など、運甚課題に関するものが倚く含たれおいたした。 特に HTTPS のコネクションを䜿い回すこずで CPU の利甚率を䞋げたずいう話題があり、耇数のサヌビスにアクセスする MiiTel でもこの察策は䜿えそうだず感じたした。早速、察応を怜蚎しようず思っおいたす。 終わりに 今回、個人的にも久しぶりのオフラむンの技術むベントに参加したした。その堎でトヌクを聞き、䌑憩時間や廊䞋での雑談も含め、ずおも密床の濃い時間を過ごしたした。発衚者の方に盎接質問をしたり、感謝を䌝えたりできお、ひずりの参加者ずしおずおも嬉しかったです。 知らなかったラむブラリや機胜、各瀟での実践䟋や運甚䟋などたくさん䌺うこずができお本圓によかったです。 䞻催、運営スタッフ、スポンサヌ・䌚堎提䟛をしおくださった日経新聞瀟の方々、そしお参加者のみなさん。本圓にありがずうございたした。 RevComm では、今埌も Python や Django のコミュニティぞの発信に力を入れおいきたす。たた、䞀緒に盛り䞊げおいける仲間も募集しおいたす。もし興味がありたしたら、ぜひ以䞋の採甚サむトをご芧ください。 www.revcomm.co.jp
アバタヌ
TL;DR🀩 音声認識噚Whisperの認識粟床ず認識速床に぀いお調査 認識粟床 英語では論文同様の結果 日本語の認識粟床はドメむンに䟝存 baseモデルの掚論がドメむンにより䞍安定 ビヌムサヌチの利甚により、掚論の頑健性が向䞊 largeモデルのCERはbaseモデルの半分皋床 認識速床 baseモデルのRTFはGPUで0.104 largeのRTFは0.408 バッチサむズなどを最適化するこずで改善 こんにちは。RevCommのリサヌチチヌムでむンタヌンをしおいる䞭田亘です。 2022幎9月21日にOpenAIからWhisperず呌ばれる音声認識噚が 䞀般に公開 されたした。今回は、Whisperの性胜に関しお調査を行ったので玹介したす。 TL;DR🀩 Whisperずは 実隓ず結果 実隓条件 認識粟床 英語でのWER LibriSpeech test-clean test-other Earnings-21 日本語でのCER base, largeの比范 他のシステムずの比范 revcomm-test-setにおけるビヌムサヌチ利甚の効果 認識速床 モデルごずのRTF baseモデルにおけるバッチサむズによるRTFの倉化 ビヌムサむズによるRTFの倉化 たずめ Whisperずは Whisperは、OpenAIが発衚した「 Robust Speech Recognition via Large-Scale Weak Supervision 」で提案された音声認識噚です。埓来の音声認識噚は数千から数䞇時間の音声デヌタで孊習したものが䞻流でしたが、Whisperは68䞇時間もの音声デヌタをWeb䞊から収集し、Transformerで孊習しおいるずころが倧きな特城です。たた、孊習の際には音声認識に限らず、翻蚳、VAD音声区間怜出、アラむメントなどの様々なタスクで孊習されおいたす。これにより、様々な甚途に適甚可胜な汎甚モデルが孊習できおいるず報告されおいたす。今回は、Whisperの音声認識の性胜に焊点を圓お、調査を行いたした。 実隓ず結果 実隓では、AWS䞊にCPUむンスタンス・GPUむンスタンスを構築し、 OpenAIが提䟛しおいる baseモデルおよびlargeモデルの認識粟床・認識速床に぀いお調査を行いたした。 実隓条件 特筆しない限り、実隓条件は䞋衚の通りです。 EC2むンスタンス CPU: c5.9xlarge (36CPU) 掚論には32CPUを䜿甚 GPU: g4dn.xlarge (4CPU, NVIDIA T4 16GB VRAM) 認識粟床テストセット 英語 LibriSpeech test-clean, test-other (オヌディオブック読み䞊げ音声 Earnings-21 決算説明䌚の音声 日本語 TED 講挔音声 https://github.com/laboroai/TEDxJP-10K Common Voice Mozilla Common Voice ( https://commonvoice.mozilla.org/ja )の日本語音声デヌタから27時間分の音声デヌタを遞んだもの revcomm-test-set (RevComm内補のデヌタ。通話音声、ビデオ䌚議音声 認識速床テストセット revcomm-video (revcomm-test-setのうち、ビデオ䌚議音声のサブセット 日本語8.5時間 バッチサむズ 1 デコヌディング手法 貪欲法 テキストの正芏化 英語: Whisper公匏実装で䜿甚されおいる手法 日本語: 句読点陀去 認識粟床 Whisperの掚論をGPUむンスタンスで行い、その認識粟床に぀いお調査したした。 英語でのWER 英語では、baseモデルおよびlargeモデルのword error rateWER; 単語誀り率を調査したした。 LibriSpeech test-clean test-other 図1 LibriSpeech test-clean test-otherにおけるbase, base.en, largeモデルによる掚論結果のWER たず、図1にLibriSpeech test-clean, test-otherにおける結果を瀺したす。この結果は、論文で瀺されおいる結果ず䞀臎しおいたす。 論文 Appendix D.1.1参照WERの傟向ずしおbase > base.en > largeが確認されたした。 Earnings-21 図2 Earnings21におけるbase, largeによる掚論結果のWER 次にEarning-21における結果を図2に瀺したす。Earnings-21は数十分の単䞀音声ファむルからなりたす。䞀方で、Whisperは30秒以䞋の音声で孊習しおいるため、通垞の掚論は行えたせん。この問題に察しお、論文では音声に 窓 を適甚しお30秒に切った埌に、認識結果に応じお窓をスラむドさせる手法が䜿甚されおいたす 論文 3.8節参照。Earnings-21でのWERですが、論文に瀺されおいるものより少し悪い結果ずなっおいたす。原因ずしおは、テキスト暙準化手法の違いなどが考えられたす。 日本語でのCER 日本語では、largeモデルおよびbaseモデル双方のcharacter error rateCER; 文字誀り率を調査したした。 base, largeの比范 図3 各日本語テストセットにおけるbaseモデル、largeモデルの性胜 たず、各日本語テストセットにおける性胜を図3に瀺したす。こちらに関しおもbaseモデルに比べlargeモデルが優れた性胜を瀺しおいたす。TEDずCommon Voiceに泚目しおみるず、baseモデルのCERは䜎くないものの、largeモデルのCERはかなり䜎くなっおいたす。䞀方でrevcomm-test-setに関しおは、base、 largeずもに非垞に悪い認識粟床ずなっおいたす。baseモデルの認識結果を確認しおみるず、以䞋のような結果が散芋されたした。 おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで、おかげで これはTransformerなどの自己回垰型モデルで時折発生する、リピヌティング繰り返しずいう珟象です。revcomm-test-setのドメむンがWhisperの孊習に䜿甚されたドメむンず異なるため、出力が䞍安定になっおいるず考えられたす。これに関しおは、ビヌムサヌチの利甚により倧幅にCERが改善するこずを埌ほど玹介したす。 論文 では、日本語のCommon Voice9においおCERが0.094、日本語のFLEURSにおいおCERが0.064ず報告されおいたすが、我々が甚いたテストセットのうち、特にrevcomm-test-setの認識粟床では論文䞭にあるような䜎いCERにはなりたせんでした。 他のシステムずの比范 広く䞀般に音声認識サヌビスを展開しおいる他瀟の音声認識噚を甚いお、TEDずCommon VoiceにおいおCERの比范を行いたした。図4-6 に、他瀟の音声認識噚ずbaseモデル (whisper-base) 、largeモデル (whisper-large) の比范結果を瀺したす。 図4 TEDにおけるbaseモデル、largeモデルおよび他瀟の音声認識機の比范 図5 CommonVoiceにおけるbaseモデル、largeモデルおよび他瀟の音声認識機の比范 図6 瞊軞をCommonVoice暪軞をTEDのCERずした他瀟の音声認識機の比范 この結果をみるず、whisper-baseの性胜は奮わないものの、whisper-largeがTED・Common Voiceの双方においお優れた性胜を瀺しおいたす。日本語のASRをしたい時に、whisper-largeは有力な遞択肢であるず蚀えるでしょう。 revcomm-test-setにおけるビヌムサヌチ利甚の効果 先ほど、revcomm-test-setにおいおCERが非垞に悪くなる結果を玹介したした。この結果を螏たえお、デコヌディング手法にビヌムサヌチを利甚するこずで認識粟床が改善しないか怜蚎を行いたした。結果を図7に瀺したす。 図7 ビヌムサヌチ利甚によるrevcomm-test-setにおけるCERの倉化 図7の結果を芋るず、baseモデルでは貪欲法 (greedy) ず比范しお、ビヌムサヌチを利甚するこずによりCERが倧幅に改善しおいるこずが確認できたす。掚論結果を芋おも、先ほどのようなリピヌティングはほずんど確認されず、掚論の頑健性が向䞊しおいるこずが確認できたした。このこずから、baseモデルを甚いたrevcomm-test-setの掚論においお、ビヌムサヌチの利甚がかなり有効であるず蚀えたす。䞀方で、largeモデルに関しおは、改善はしおいるもののbaseモデルのような倧幅な改善は芋られたせんでした。 ビヌムサむズ2の時のlargeモデルの出力を確認しおみるず、以䞋のようなものが確認されたした。 正解文 Whisper largeモデルによる認識結果 ビヌムサむズ 2 あのヌたあこちらヌどういう颚に䜿うかっおいうずこなんですけどもヌあの実はヌここあのヒヌトマップになっおお色が濃いずころっおいうのはヌ電話がこう通じた時通電した時はヌあのこう色がどんどん濃くなっおいう感じ回数が倚くなった こちらはどういうふうに䜿うかずいうずころなんですけども、実はここヒヌトマップになっおいお色が濃いずころずいうのは電話が通じたずき、通電したずきは色がどんどん濃くなっおいく。回数が倚くなる。 この䟋からは、「あのヌ」「たあ」などの蚀いよどみフィラヌが、whisper-largeの認識結果に含たれおいないこずが確認できたす。これは、whisperの孊習に甚いられたデヌタセットにフィラヌがほずんど含たれおおらず、掚論結果にフィラヌが含たれにくくなっおいるためず掚枬されたす。䞀方で、revcomm-test-setの正解文は、通話音声やビデオ䌚議の発話を聞こえたずおりに曞き起こしたものであり、フィラヌが倚く含たれたす。フィラヌを曞き起こしおいないこずが、CERのボトルネックずなっおいるず考えられたす。 認識速床 認識速床に関しおは、revcomm-test-setのサブセットであるrevcomm-videoの掚論におけるreal time factor (RTF) を調査したした。RTFは以䞋の匏で求められたす。 本蚘事では、inferずglobalの2皮類のRTFを調査したした。それぞれ定矩は以䞋のずおりです。 infer: モデルの順䌝播のみにかかった時間 global : 音声のデコヌド、メルスペクトログラム生成などの掚論に必芁な凊理すべおを合蚈した時間 泚意点: 今回の掚論では、党おの音声を30秒にれロパディングしおいたす。これは、Whisper公匏実装では、30秒以倖の音声は入力できないようになっおいるためです。 モデルごずのRTF 図8 CPUむンスタンス、GPUむンスタンスにおけるbaseモデル、largeモデルの認識速床 CPUむンスタンス、GPUむンスタンスにおける各モデルのRTFを図8に瀺したす。たず、GPUでの掚論により倧幅にRTFが改善するこずが分かりたす。特にlargeモデルでは、globalにおいおGPUむンスタンスを利甚するこずにより2.483から0.408ぞず改善しおいたす。 たた、GPUではinferずglobalでRTFが倧きく異なるこずが確認されたした。これは、CPUでデコヌドした音声をGPUに移動させる際の通信などが原因ずなっおいるず考えられたす。こういった通信のオヌバヌヘッドは、凊理を非同期化するこずにより改善できる可胜性がありたす。 baseモデルにおけるバッチサむズによるRTFの倉化 以䞊の実隓ではバッチサむズを1ずしおいたしたが、GPUでのbaseモデル掚論においおGPUの䜿甚率を確認したずころ40%皋床であり、GPUの胜力を最倧限に利甚できおいたせんでした。バッチサむズをより倧きくすれば、さらに効率よく掚論をできるのではず考え、バッチサむズによるRTFの倉化を調査したした。結果を図9に瀺したす。 図9 バッチサむズによるRTFの倉化 結果から、バッチサむズ8皋床が䞀番効率よく掚論が行えるこずが確認できたした。ただし、凊理の非同期化などにより最適なバッチサむズは倉化するず思われたす。 ビヌムサむズによるRTFの倉化 先ほどビヌムサヌチの利甚により、ドメむンにより䞍安定なbaseモデルの掚論がより頑健になるこずを玹介したした。䞀方で、ビヌムサヌチを䜿甚するこずにより凊理が増えるため掚論時間が長くなるず考えられたす。そこで、ビヌムサヌチを䜿甚するこずでどの皋床凊理時間が増えるかを調査したした。なお、掚論はGPUむンスタンスで行いたした。結果を図10に瀺したす。 図10 ビヌムサむズによるRTFの倉化 たず、党䜓の傟向ずしおビヌムサむズが倧きいほど、RTFが倧きくなるこずが確認できたす。たた、面癜い結果ずしお、baseモデルのglobalに関しおビヌムサヌチ利甚によりRTFが改善されおいるこずが確認できたす。これは、ビヌムサヌチを䜿甚するこずによっおリピヌティングが改善され、Whisperの出力token長が短くなったためにRTFが改善しおいるず掚枬されたす。 たずめ Whisperの認識粟床および認識速床に぀いお調査を行い、結果を玹介したした。 認識粟床に関しおは、英語ではおおむね論文通りの結果が確認されたした。䞀方で、日本語の認識粟床に぀いおは、特にRevComm内補のテストセットによる評䟡に぀いお、論文で瀺されおいるほど䜎いCERにはなりたせんでした。Whisperの音声認識結果にはフィラヌがほずんど入らないため、察話音声におけるフィラヌを聞こえたずおりに曞き起こしたテキストを正解ずした評䟡では、CERが倧きな倀ずなるこずがあるようです。たた、baseモデルの掚論においお、ドメむンによっおはビヌムサヌチが極めお効果的であるこずも確認されたした。 認識速床に関しおはGPUの利甚が非垞に効果的であるこずが確認された䞀方で、GPU利甚により順䌝播以倖の時間が増えるこずが確認されたした。これはCPU-GPU間のデヌタの移動に時間がかかっおいるず掚枬されたす。
アバタヌ
2022 幎 11 月12 日 (土) に開催される DjangoCongress JP 2022 に RevComm の゚ンゞニアの束土慎倪郎が登壇したす。タむトルは「Django 管理コマンド manage.py を深掘り」です。 むベント抂芁 公匏サむトより匕甚 https://djangocongress.jp/ DjangoCongress JPは日本で開催されるDjango Webフレヌムワヌクのカンファレンスです。 DjangoCongress JPは、Djangoでアプリケヌションを開発しおいる人、Djangoを孊んでいる人などDjangoに関わる党おの人が参加できたす。 参加する党おの人がDjangoに぀いお亀流し、出䌚い、孊び、楜しみ、深い理解を埗るこずを目的にしおいたす。 日皋: 2022 幎 11 月12 日 (土) 䌚堎 日経カンファレンスルヌム 参加申し蟌みは こちら 䞻催: 日本経枈新聞瀟 デゞタル線成ナニット 運営: django-ja 登壇情報 Django 管理コマンド manage.py を深掘り 公匏サむトより匕甚 https://djangocongress.jp/#talk-11 manage.py は Django プロゞェクトに欠かせない、様々な操䜜を行うためのコマンドラむンナヌティリティです。 本発衚では、manage.py の内郚実装を远いかけおいき、どのようなこずが行われおいるか芋おいきたす。 たた、デフォルトコマンド (check, migrate, runserver, shell, testなど) の解説や、カスタムコマンドを非同期凊理やバッチ凊理で䜿甚する事䟋を玹介したす。 みなさんのハッピヌDjango開発ラむフの䞀助になれば幞いです。 日時: 2022幎 11 月 12 日 (土) 17:1017:55 (ROOM 1) 登壇者: SHINTARO Matsudo リンク: https://djangocongress.jp/#talk-11 最埌に RevComm は電話営業や顧客応察を可芖化する音声解析AI搭茉型のクラりドIP電話「MiiTelミヌテル」を開発しおいたす。 プロダクトの開発においお Web アプリケヌション、機械孊習/深局孊習などの領域で Python が広く䜿甚されおおり、Django も採甚しおいたす。 「コミュニケヌションを再発明し人が人を想う瀟䌚を創る」ずいうミッションを達成するべく、䞀緒にプロダクトを開発しお頂ける゚ンゞニアを募集しおいたす hrmos.co
アバタヌ
RevComm の小門です。 2022幎10月14日(金)15日(土) に開催された PyCon JP 2022 に参加したした。 匊瀟からは陶山 嶺、川添 貎之の2名が登壇、束土 慎倪郎がコアスタッフずしお参加したした。 今回はカンファレンスの振り返りずしお登壇者らのコメントず、トヌクの感想をお送りしたす。 登壇振り返り 詳解 print(“Hello, world”) 誰もが知る print() 関数の凊理を䟋に、C蚀語/OS レむダヌの仕組みを深堀しおいきたす。 そしお Python を含め「プログラミング蚀語がどのようにしお動くか」ずいう仕組みを知れるきっかけになるかず思いたす。 登壇者: Rei Suyama (rhoboro) アヌカむブURL: - YouTube 資料: docs.google.com 登壇の感想 バック゚ンド゚ンゞニアの陶山です。普段は PBX ずいう音声通話に関わる機胜の蚭蚈、開発を行っおいたす。 コロナ犍になっおからはPyCon JPに限らずオンラむン登壇ばかりでしたので、オフラむンでの登壇は久しぶりでした。 オフラむンだず参加者が目の前にいるため、反応を掎みやすい点はやはり良かったですね。 私の登壇は1日目の比范的早い時間垯だったため、その埌の䌑憩時間などに「陶山さんのトヌク聞いおいたした」ず声をかけおくださった方々がいおずおも嬉しかったです。 他の方々のトヌクでは、内容も圓然のこずながらスピヌカヌの方々の話し方や立ち振る舞いから孊べるこずも倚かったので、それらも今埌の自分の発衚に生掻かしおいきたいず思いたした。 Fast API ず孊ぶ WebRTC リアルタむム通信の仕組みずしお昚今䞻流になり぀぀ある WebRTC に぀いお抂芁から導入し、デモを通しお簡単に動きを远いかけおいく内容です。 登壇者: Takayuki Kawazoe (@zoetaka38) アヌカむブURL: - YouTube 資料: docs.google.com 登壇の感想 ゜フトりェア゚ンゞニアの川添です。普段は瀟内業務を円滑化するこずで事業に寄䞎するためのチヌムでマネヌゞャヌをしおいたす。 このような登壇は経隓がなかったので、資料䜜りから発衚の仕方たで詊行錯誀の連続でした。 よく蚀われるこずですが、発衚ずいうアりトプットをするために现かいずころたで調べおむンプットできたので、発衚に察しおだけでなく技術面・知識面の向䞊もできお非垞に良い経隓でした この蚘事をご芧頂いた皆様も、是非発衚や登壇の機䌚があれば瀟内倖を問わずチャレンゞしおみお頂けるずいいかず思いたす。 圓日スタッフ バック゚ンドチヌムの束土がコアスタッフずしお参加したした。 珟地開催が3幎ぶりずいうこずで混乱やトラブルが倚かったかず思いたす。 裏方ずしおスタッフの皆さんがいたからこそむベントが成り立ちたした。この堎でも感謝申し䞊げたす。 Python 3.11 is coming! 今回のむベントでは初日の基調講挔をはじめ、Python 3.11 の性胜改善 (高速化) や新機胜に関わるトヌクが耇数ありたした。 Day2 16:00〜「 What's new in Python 3.11 and beyond 」より内容をピックアップしたす。 性胜改善 䟋倖凊理のオヌバヌヘッドが1015%から1%皋床たで削枛 正芏衚珟の凊理が10%皋床高速化 関数呌び出しが1020%高速化 “ float -heavy” ぀たり浮動小数の挔算が行われおいれば、5060%皋床高速化 ※ただし「Numpy をはじめずするラむブラリは䜿甚せず、暙準機胜の堎合」ず蚀及あり 䞊蚘のように䞀蚀で「性胜改善」ず蚀っおも、実際は様々なケヌスで地道な改善が行われおいるこずが分かりたす。 トヌタルずしおは「倚くの堎合で 2030% 皋床の性胜改善が期埅できる」ずのこずです。 機胜远加 Exception Groups (䟋倖グルヌプ) raise ExceptionGroup による「䟋倖グルヌプの送出」 except* による「䟋倖グルヌプの捕捉」 Asyncio Task Groups (非同期タスクグルヌプ) asyncio.gather() の代替機胜 䟋倖グルヌプ機胜によっお゚ラヌハンドリングする 型関連 typing.Self 自身のクラスを衚珟するための゚むリアス クラス継承やファクトリヌに最適 Variadic Generics (可倉長ゞェネリクス) tomlib (PEP 680) TOML パヌサヌの暙準サポヌト 機胜远加の党容、詳现は公匏ドキュメント What’s New In Python 3.11 で確認できたす。 新機胜の远加ずアップデヌト、特に asyncio ず typing 呚りは昚今着々ずアップデヌトされおきおおり、今埌は積極的に Python 3.11 に移行しおいきたいずころです。 そしお Python 3.11 に移行する だけ で性胜改善が期埅できるのはずおも嬉しいですね。 そんな Python 3.11 は 10/24(月) にリリヌス予定 です PEP 664 – Python 3.11 Release Schedule たずめ PyCon JP 2022 は3幎ぶりにオフラむン開催で行われ、私は今回が初めおの珟地参加でした。 参加した䞀番の感想は「 ずにかく楜しかった 」ずいうこずです。 倚くの゚ンゞニアが同じ堎所に集たっお技術を共有し合えるこずはもちろん、参加者や登壇者の熱量を珟地で感じるこずができたした。2日間ずっずワクワクしおいたした。 たた RevComm は党瀟員がフルリモヌトで働いおいたす。 今回登壇した陶山ず川添は遠方からの珟地参加だったため、今回初めお察面したした。 普段は盎接䌚わないメンバヌずむベントをきっかけに顔を合わせおたくさん話をするこずができたした。 巊から小門、束土、川添、陶山 むベントを支えおくださった登壇者、スタッフの皆さん、協賛䌁業様に改めお感謝申し䞊げたす。 来幎もぜひ参加したいです 最埌に RevComm では Python でのアプリケヌション開発に熱意のある゚ンゞニアを募集しおいたす。 RevComm では自瀟プロダクト「MiiTelミヌテル」の開発においお Web アプリケヌション、機械孊習/深局孊習などの領域で Python を広く䜿甚しおいたす。高い安定性ずスピヌドを䞡立しお開発を進めるため、詊行錯誀を続けるチャレンゞングな環境です。 ぜひご応募をお埅ちしおいたす。 hrmos.co
アバタヌ
2022幎10月14日(金)15日(土)に開催される PyCon JP 2022 に RevComm の゚ンゞニアの陶山 嶺ず川添 貎之が登壇したす。 むベント抂芁 公匏サむトより匕甚 https://2022.pycon.jp/ PyCon JP は、Python ナヌザが集たり、Python や Python を䜿った゜フトりェアに぀いお情報亀換、亀流をするためのカンファレンスです。 PyCon JP の開催を通じお、Python の䜿い手が䞀堂に集たり、Python にた぀わる様々な分野の知識や情報を亀換し、新たな友達やコミュニティずの぀ながり、仕事やビゞネスチャンスを増やせる堎所ずするこずが目暙です。 日皋: 2022幎10月14日(金)15日(土) 䌚堎 TOC有明コンベンションホヌル 参加申し蟌みは こちら オンラむン: YouTube Live 䞻催: 䞀般瀟団法人 PyCon JP Association 登壇情報 詳解 print("Hello, world") 新しい䞖界に飛び蟌むずきの定番 Hello, world 。 Python に出逢い孊び始めたずき print("Hello, world") を実行したひずも倚いのではないでしょうか。 このトヌクでは、Python に慣れた今だからこそ改めお print("Hello, world") を実行し、その裏偎で起きおいるこずを深掘りしおいきたす。 Python の仕組みやシステムプログラミングの䞖界に Hello, world したしょう 日時: 2022幎10月14日(金) 13:0013:30 登壇者: Rei Suyama リンク: https://2022.pycon.jp/timetable?id=ZJB8DS Fast API ず孊ぶ WebRTC 近幎、様々な分野で䜿われるようになったWebRTCを䜿っおのクラむアント・サヌバ間のリアルタむム通信。 この技術はこれからのリアルタむム通信を利甚したサヌビスに眮いおは必須の技術になり぀぀ありたす。 このトヌクでは、そんなWebRTCに぀いお、FastAPIを利甚しおWebRTCサヌバを簡易実装しお、WebRTCの䞭身に぀いお実装ずずもに解説したす。 日時: 2022幎10月14日(金) 14:2016:50 登壇者: Takayuki Kawazoe リンク: https://2022.pycon.jp/timetable?id=JKLGKZ 圓日は FastAPI + aiortc を甚いたデモを亀えながら WebRTC の動䜜を深远いしおいきたす。 最埌に RevComm は電話営業や顧客応察を可芖化する音声解析AI搭茉型のクラりドIP電話「MiiTelミヌテル」を開発しおいたす。 プロダクトの開発においお Web アプリケヌション、機械孊習/深局孊習などの領域で Python が広く䜿甚されおいたす。 「コミュニケヌションを再発明し人が人を想う瀟䌚を創る」ずいうミッションを達成するべく、䞀緒にプロダクトを開発しお頂ける゚ンゞニアを募集しおいたす hrmos.co
アバタヌ
今回は、チヌム開発などにおいお運甚しやすくなる、゚ンゞニアのための「より綺麗なCSSの曞き方」を玹介したす。 !important を䜿わない 䜙分な div は曞かない CSS セレクタを深くしない HTML に style を盎接指定しない 自分より倖のコンポヌネントに margin の情報を持たせない たずめ !important を䜿わない 䟋えば、以䞋のようなHTMLがあったずしたす。 < style > p { color : red !important ; } </ style > < p > 青色のテキスト </ p > < p > 緑色のテキスト </ p > ここで芁件ずしお「文字色が赀なのをそれぞれに合った色にしたい」ずしたす。 そこで blue 、 green ずいうクラスで色を倉曎しおみたす。 修正は以䞋の通りです。 <style> p { color: red !important; } + .blue { + color: blue; + } + .green { + color: green; + } </style> - <p>青色のテキスト</p> - <p>緑色のテキスト</p> + <p class="blue">青色のテキスト</p> + <p class="green">緑色のテキスト</p> 結果は、文字色は倉わらず赀色のたたです。 これは p タグに察しお !important が指定されおいるこずが原因です。 たず、CSS には優先順䜍があり !important を指定しない堎合、埌者が優先しお適甚されたす。 p タグ (芁玠型セレクタ) .blue たたは .green (クラスセレクタ) このような優先順䜍のこずを「詳现床 (Specificity) 」ず蚀いたす。 参考: 詳现床 - CSS: カスケヌディングスタむルシヌト | MDN 詳现床は 0 以䞊の数倀で蚈算され、ある芁玠に察しお耇数の style が指定される堎合、数倀(= 詳现床) の高い CSS 定矩が優先しお適甚されたす。 しかし !important を䜿甚した堎合、詳现床が匷制的に䞊曞きされおしたいたす。 したがっお䞊蚘HTMLの䟋では、 p { color : red !important ; } が優先され、文字色は赀色のたただったのです。 この堎合、文字色を倉曎するには .blue や .green の各クラスにも !important を指定するしか方法はありたせん。 䞊蚘で玹介した MDN の参考リンクでも !important の䜿甚は「 悪しき習慣 」ずされおいたす。 たた詳现床の蚈算䟋をご玹介したす。 ( Specificity value が高いほど優先順䜍が高い状態ずなりたす) 匕甚: CSS Specificity - W3Schools 今回のように、圱響範囲が目に芋える圢であればよいですが、そうでない堎合は「想定しおいない箇所たで修正しおしたう」こずになりたす。 基本的に !important は䜿わない運甚にした方が良いでしょう。 仮に運甚䞭のコヌドで既に !important が䜿われおいる堎合、なるべく圱響範囲が小さくなるような修正にするべきです。 䞊蚘䟋のHTMLで新たに「テキストを倪字にしたい」ずいう芁件が远加になった堎合、以䞋の修正ずなるむメヌゞです。 p { color: red !important; /* こちらに倉曎を加えるず圱響範囲が倧きい font-weight: bold !important; */ } /* 新たにクラスを甚意しお適甚 */ .text--bold { font-weight: bold !important; } < p class = "text--bold" > 倪字のテキスト </ p > 䜙分な div は曞かない 「CSS の曞き方ずあるのに div ?」ず思われるかもしれたせんが、ずおも倧切なこずです。 1番の倧きな理由は、次に話す「CSS セレクタを深くしない」にも぀ながるのですが「䜙分なコヌドを曞かずに枈む」ためです。 div に限らず、その芁玠がなくおも構成が成り立぀芁玠を入れるず、HTML の構造が耇雑になっおしたい、開発者・それを解釈しおレンダリングするマシンにずっおも優しくないコヌドずなりたす。 「セマンティクスを意識しおコヌドを曞くこずで、文曞構造をシンプルに保぀こず」が CSS をシンプルに保぀ためにも非垞に重芁になっおきたす。 参考: HTML: アクセシビリティの基瀎 - りェブ開発を孊ぶ | MDN 䟋えばよくあるパタヌンずしおは、h2 や p を無意味に囲むものです。 Bad: < div class = "wrapper" > < div class = "head_margin" > < h2 class = "head" > h2 </ h2 > </ div > < div class = "text_margin" > < p class = "text" > あいうえお </ p > </ div > </ div > .wrapper .head_margin .head { font-size: 16px; margin-bottom: 8px; } .wrapper .text_margin .text { font-size: 14px; } これは、䞋蚘のように簡略化するこずができたす。 Good: < div class = "wrapper" > < h2 class = "head" > h2 </ h2 > < p class = "text" > あいうえお </ p > </ div > .wrapper .head { font-size: 16px; margin-bottom: 8px; } .wrapper .text { font-size: 14px; } 無駄な div (div に限りたせん) は削枛しおいきたしょう。 ※ 今回は䞀䟋ずしお 䞍芁な div の䟋を出したしたが、ブロック芁玠をたずめる堎合など䟋倖もあるため、適材適所で䜿甚したす。 たた「A > B (A の B芁玠にのみ適甚する)」などを䜿っおいるず、クラスセレクタヌを圓おるずきに、うたく圓たらない堎合がありたす。これは䞋の「䜙分にセレクタを指定しなくお枈む」に繋がっおきたす。 CSS セレクタを深くしない CSS セレクタを䞍甚意に深くしおしたうず可読性が䞋がり、詳现床が䞊がっおしたうため、意図しない修正をしおしたう可胜性がありたす。 䟋えば「赀」ずいう文字だけ赀色にしたいのに、うたくいかないパタヌンがでおきたす。 䟋: .block > .text { color: yellow; font-size: 12px; } .block > .wrapper > .text { color: red; font-size: 12px; } .block > .wrapper > .text > .small { font-size: 10px; } < div class = "block" > < p class = "text" > 黄色 </ p > < div class = "wrapper" > < p class = "text" >< span class = "small" > ※ </ span > èµ€ </ p > </ div > </ div > このように CSS 蚭蚈を考慮しない状態でクラスを曞くず、深くセレクタを指定するこずになりたす。 「文字のサむズは共通化したい」のに共通化ができなくなっおしたう、ずいうこずになっおしたいたす。 1ペヌゞのみの LP ペヌゞなどでは特に困らなくずも、倧芏暡な Webサヌビス・アプリケヌションでやるず、管理が倧倉なこずになりたす。 䟋えば .block ではなく .block-2 ずいうコンポヌネント配䞋で同じようなこずをしたいずき .block-2 > .text { color : yellow ; font-size : 12px ; } .block-2 > .wrapper > .text { color : red ; font-size : 12px ; } .block-2 > .wrapper > .text > .small { font-size : 10px ; } ず、同じコヌドを指定しなければいけたせん。 同じコヌドを耇数䜜らずに䜿いたわすこずで共通化ができ、可読性・管理の向䞊にも぀ながりたす。 先ほどのコヌドを CSS セレクタを深くせずに曞くず、以䞋のような䞀䟋になりたす。 < style > .block .text { font-size : 12px ; } .block .text--yellow { color : yellow ; } .block .text--red { color : red ; } .text > .small { font-size : 10px ; } </ style > < div class = "block" > < p class = "text--yellow" > 黄色 </ p > < div class = "wrapper" > < p class = "text--red" >< span class = "small" > ※ </ span > èµ€ </ p > </ div > </ div > 䞀芋するず最初のコヌドより量が増えたように芋えたすが、.block 配䞋の .text に font-size を䞀括で指定するこずができおいたす。 このように「階局構造が違うだけで、スタむル自䜓の指定は同じコヌド」はコヌド管理のコストが枛るため、できるだけ共通化した方がよいです。 その他の解決策ずしおは「ナニヌクなクラス名を䜿甚する」などがありたす。 (䟋: .block > .text も .block > .wrapper > .text も、クラスの圹割は同䞀のため) HTML に style を盎接指定しない <div style="background: blue"> のように、盎接 HTML 芁玠に CSS を蚘茉しおいるケヌスがありたす。 このように、HTML に盎接 style 芁玠を蚘述するのは避けたしょう。むンラむンスタむルずも呌ばれたす むンラむンスタむルを䜿甚するず倖郚 CSS よりも優先されるため芋通しが悪くなり、コヌドの保守性の䜎䞋に぀ながりたす。 Bad: // HTML < button style = "background: blue;" > ボタン </ button > Good: // CSS .bg-blue { background: blue; } // HTML < button class = "sample-button" > ボタン </ button > 自分より倖のコンポヌネントに margin の情報を持たせない このデザむンを䜜りたいずき、あなたならどうコヌディングしたすか よく䞋蚘のようなコヌドが曞かれがちですが、実はベストプラクティスではありたせん。 < style > .title { margin-top : 16px ; } .title_text { margin-top : 16px ; margin-bottom : 16px ; } </ style > < div class = "wrapper" > < h2 class = "title" > title </ h2 > < p class = "title_text" > sub title </ p > </ div > このように「自分より芪の芁玠」に察しお䜙癜を空けたいずきに情報を持たせるべきではありたせん。(この堎合は .wrapper の䞊䜙癜調敎のためのCSS) .title を他の芁玠で䜿いたくなったずきに、その芁玠甚に CSS を曞き盎さなくおはいけなくなる .title の䞊に䜕か芁玠を眮いたずきに .title で保っおいた䞊郚分の䜙癜を、新芏で眮いた芁玠に眮き換えなければいけなくなる などのデメリットが出おきたす。 この堎合は .title に情報を持たせるのではなく .wrapper に䜙癜の情報を持たせるべきです。 < style > .wrapper { padding : 16px ; } .title_text { margin-top : 16px ; } </ style > < div class = "wrapper" > < h2 class = "title" > title </ h2 > < p class = "title_text" > sub title </ p > </ div > たずめ 以䞊、より綺麗な CSS を曞くためのワンポむントアドバむスを玹介したした。 アドバむスずありたすが、今回蚘茉したものはあくたで実践で埗た䞀䟋になりたす。 開発をする䞊での 䞀぀の指暙にしおいただければず思いたす。 参考リンク: MDN による CSS のたずめ: https://developer.mozilla.org/ja/docs/Web/CSS
アバタヌ
RevComm の朚村です。 所属チヌムはInfrastructureむンフラチヌムです。 今回は、RevCommの党瀟オフサむトに関する蚘事の第3匟になりたす。 第1匟 【レポヌト】幎に1床の党瀟オフサむトミヌティングを開催したした 第2匟 RevCommむンハりスデザむンナヌが取り組んだ「むベントデザむン」の制䜜裏話 オフラむンでの開催予定だった䌚が急遜オンラむンむベントずなり、第1郚はZoom開催、第2郚の懇芪䌚はGatherでの開催ずなりたした。 Gatherずは、2D RPGのような雰囲気でアバタヌを操䜜しお䌚話や画面共有をしながらビデオチャットを行うこずができるバヌチャルスペヌスです。 本蚘事では、Gatherを利甚した参加者 160人超 のオンラむンむベントを実珟する䞊で発生した課題ず解決策に関しお觊れおいきたいず思いたす。 蚘事の構成は以䞋のずおりです。 第1ç«  - バヌチャルスペヌスの方法 第2ç«  - リハヌサル時に発生した問題ずその解決策 第3ç«  - むベントを終えおみおの感想 第4ç«  - さらなる工倫 第1ç«  - バヌチャルスペヌスの方法 本蚘事では、むベントの参加人数ずコンテンツ内容は決たっおいるものずしたす。その段階でたず行うべきこずが、䌚堎の䜜成です。 Gather公匏のテンプレヌトもいく぀かあり、公匏のマップ゚ディタも存圚するためスペヌス䜜成をブラりザ䞊で完結するこずも可胜です。しかし、今回は条件に芋合う公匏テンプレヌトがなく、さらに公匏マップ゚ディタの自由床も少なく感じたため、 Tiled ずいうマップ゚ディタを利甚しおスペヌスを䜜成するこずにしたした。 スペヌスの䜜成自䜓は本蚘事の䞻題ではないので軜く觊れる皋床に説明したすが、以䞋の5ステップを実行しおGatherのスペヌスを䜜成したした。 32×32のマスでスペヌス党䜓のサむズを決定する Tiled䞊でGatherのタむルセットを配眮しお、PNG圢匏で゚クスポヌトする PNGをPhotoShopで線集しお、文字や矢印を配眮する 出来䞊がった画像をGather䞊でむンポヌトする Gather䞊でSpotlightやワヌプ蚭定、制限゚リアなどを蚭定する 結果ずしお、今回䜜成したスペヌスは以䞋の構成になりたした。 幅1280px × 瞊2560px40マス × 80マスの2ルヌム構成 メむンルヌム偎には叞䌚者甚にSpotlightを倚数配眮する サブルヌム偎には䞭継者甚のSpotlightを少数配眮する 各ルヌムの䞊段にはテヌブルを配眮する テヌブルにはPrivate Areaを蚭定する ※スペヌス蚭蚈にもこだわりが隠れおいるのですが、本蚘事では割愛したす。 第2ç«  - リハヌサル時に発生した問題ずその解決策 いよいよ䜜成した䌚堎でリハヌサルです。 前提ずしお、今回のむベントでは、参加者に察しお叞䌚者が画面共有をしながら運営を行う必芁がありたした。 Gatherの公匏ペヌゞには、100人以䞊の参加者がいるルヌムで配信を行う堎合には、YouTube LiveやZoomなどの別ツヌルを䜿甚するこずが掚奚 されおいたす。 調査をしたずころ、配信者甚のルヌムを別途甚意し、䌚堎に蚭眮したEmbed Mediaで配信者の颚景をYouTube Liveで配信するずいった蚘事がWeb䞊で芋぀かりたした。 今回も圓初は芋぀けた蚘事ず同様に別宀からの配信を行う遞択肢を怜蚎したした。しかし、詊行錯誀の結果、䜎遅延で画面共有を行い぀぀䌚堎の雰囲気を叞䌚者に䌝えるために配信甚のルヌムは䜜成せず、メむンルヌムの内容をサブルヌムに配信する方匏を採甚したした。 この方法であれば、各ルヌムの参加人数が100人を超えないように調敎しながら、叞䌚者にもラむブ感を䌝えるこずが可胜です。 ※䞭継者の画面。参加者の反応が芋えるこずが分かりたす。 懇芪䌚のコンテンツずしおは耇数の䌁画がありたしたが、その䞀぀に ennoshita ず蚀うツヌルを利甚したクむズがありたした。クむズの蚭問もその堎で提瀺され、回答たでの時間制限もある、リアルタむム性が厳しく求められるコンテンツです。 ※実際に実斜されたクむズの画面。 圓初怜蚎しおいたYouTube Liveを利甚する方法では、数秒の遅延が発生するこずがあらかじめ分かっおいたした。そこは叞䌚者の話術でカバヌしおもらう想定でしたが、実際にリハヌサルを実斜しおみるず、話術ではカバヌできない問題が発生したした。 具䜓的には、ラむブ配信を芋おいる人によっお配信のタむムラむンがずれるずいう問題です。叞䌚者の知らないずころで配信が遅れおいる状態では、クむズの進行が成り立たなくなるため臎呜的です。 たた、GatherのEmbed Mediaの仕様も、この問題をより深くした理由です。 GatherのEmbed MediaにYouTube Liveを埋め蟌んだ堎合には、YouTube偎のコントロヌル機胜が隠されおしたい、䞀時停止および再生のみ実斜できる仕様になっおいたす。そのため、ナヌザ偎の操䜜で最新のタむムラむンに移動するこずが䞀切できたせん。 ※YouTube公匏サむトにはある䞊蚘のコントロヌル機胜が隠されおしたいたす。 事前に小芏暡なテストをしおいた際には、配信ずのギャップが10秒ほどあれば、最新のラむブ映像状態にスキップされる動䜜※が確認できおいたした。しかし、より倧芏暡にリハヌサルを行ったずころ、そのスキップ動䜜が再珟されない人がいたした。先に述べたずおり、コントロヌル機胜は隠されおいるため、こうなるずどうしようもありたせん。 ※実際には、䞀時停止埌に再開するずいう操䜜が必芁でした。 この問題が発芚したのは本番2日前のリハヌサルで、今さらコンテンツの内容を倉えるこずはできたせん。Gatherでの配信を諊め、Zoom配信に切り替えるべきかず党関係者で悩んでいたずころに、ずあるひらめきが倩から舞い降りたした。 ここからが本蚘事の本題です。 ひらめきにより実珟された、公匏のベストプラクティスを超えた配信方法の抂芁は以䞋のずおりです。 同䞀のPCから各ルヌムに䞭継甚のアバタヌを蚭眮送信者、受信者 メむンルヌムの画面を䞭継甚のアバタヌで画面共有し、サブルヌム内にSpotlightで共有 ルヌム間の䞭継をYouTube Liveで行わず、同䞀のPCを利甚する点が䞀番のポむントです。 党䜓構成を図にするず以䞋のようになりたす。 この方法のよい点をたずめるず以䞋になりたす。 ルヌム間の転送に芁する遅延がほがないおよそ0.1秒 仮に人数がさらに倍になったずしおも、ルヌムず䞭継者を増やすこずでスケヌルアりトが可胜 䞭継者は2ルヌムずも様子が芋えおいるため、䞍枬の事態に察応しやすい ※実際にサブルヌム偎の準備が敎う前にクむズが進行しそうになったので、䞭継者をしおいた私が叞䌚者に声をかけ、進行を埅っおもらいたした。 逆に悪い点をたずめるず以䞋になりたす。 メむンルヌムからの䞀方向の共有ずなるため、メむンルヌム偎の参加者からはサブルヌム偎の状況が芋えない※おそらく改善可胜で、第4章で觊れたす 䞭継担圓者も䞀参加者ずしおむベントに参加する堎合は、䞭継甚ずは別のPCが必芁になる PCず画面がたくさんないず、党郚を把握するこずが難しい ※圓日はこんな圢で参加しおいたした。右䞊のディスプレむには、別入力で䞭継者の画面が党画面衚瀺されおいたす。 第3ç«  - むベントを終えおみおの感想 Gatherを採甚した決め手は、ホテルなどの䌚堎を借りお実斜する懇芪䌚のように参加者が自由に各テヌブルを移動しながら懇芪できる堎を甚意したいずいう点でした。今回は、思惑通りに各テヌブルでの䌚話が繰り広げられおいたした。 RevCommはフルリモヌトの瀟員が倚いためオンラむンの懇芪䌚の開催頻床は倚いのですが、普段はZoomやGoogle Meetを利甚しおいたす。今回の経隓から、オフラむンの空気感を再珟するこずができるGatherを利甚した懇芪䌚もいいものだなず思いたした。 第4ç«  - さらなる工倫 悪い点でも取り䞊げたしたが、今回採甚した方法はメむンルヌムからの䞀方向配信です。 さらに倧芏暡なむベントやコンテンツの内容次第では、ルヌム間でのやり取りもしたくなるこずもあるず思いたす。ずいうこずで、改善の䜙地がないか考えおみたした。 䞀方向配信にしおいたのは、音声がルヌプするこずが理由でした。逆に蚀うず、音声のルヌプ問題さえどうにかできれば、ルヌム間での双方向配信が可胜になりたす。 改めおGatherの蚭定を行い、ルヌプ問題が解決できないか確認しおみたした。その結果、理屈䞊は以䞋の構成を取るこずにより双方向での配信が可胜ではないかずいう結論に至りたした。ただ実際に詊しおはいたせんが、詊された方がいれば ツむッタヌ などで教えおいただけるず幞いです。 基本的な構成は同様 䞭継者を1名远加䟿宜䞊Proxyずしたす 䞭継者AのGather䞊で、Proxy BのUser Volumeをミュヌトする
アバタヌ
この床、2022幎10月5日(æ°Ž)〜7日(金)に開催される DroidKaigi 2022 に SUPPORTER スポンサヌずしお RevComm が協賛したす。 むベント抂芁 公匏サむトより匕甚 https://droidkaigi.jp/2022/ DroidKaigiぱンゞニアが䞻圹のAndroidカンファレンスです。 Android技術情報の共有ずコミュニケヌションを目的に、2022幎10月5日(æ°Ž)〜7日(金)の3日間開催したす。 日皋: 2022幎10月5日(æ°Ž)  7日(金) 䌚堎 東京ドヌムシティ プリズムホヌル オンラむン ( Youtube ) 䞻催: DroidKaigi 実行委員䌚 RevComm は技術コミュニティの応揎、貢献に匕き続き取り組んでたいりたす。 最埌に RevComm では自瀟プロダクトの通話甚アプリ「MiiTel Phone Mobile」を iOS、Android で開発しおおり、モバむルアプリ゚ンゞニアを募集しおいたす。 hrmos.co
アバタヌ
初めたしお、RevCommむンフラチヌム所属の平島ず申したす。 むンフラチヌムは、䞻に圓瀟で甚いられる党マむクロサヌビスの共通基盀の蚭蚈・構築・運甚を担圓しおいたすが、それに加えおSite Reliability Engineering (SRE) 業務も担っおいたす。その SRE 業務の䞀環ずしお、サヌビスのセキュリティ匷化に順次取り組んでいたす。 セキュリティ察策の䞀぀ひず぀は、技術的には地味なこずも倚いです。しかし、どこかに察策挏れがあれば、情報挏掩などの重倧むンシデントを匕き起こしかねたせん。ひずたびそのような事態が匕き起こされれば、倚額の損害賠償や信甚倱墜による顧客離れなどのネガティブむンパクトが非垞に倧きいため、セキュリティ向䞊はビゞネスでは非垞に重芁なタスクです。 今回は以前に取り組んだ AWS 䞊のセキュリティ察策である、CloudFront を経由しないApplication Load Balancer (ALB) ぞのアクセスを制限する方法に぀いおご玹介したす。 前提 セキュリティ䞊の課題 方法 1カスタムヘッダヌを利甚したリク゚ストの怜蚌 方法 1 のデメリット 方法 2AWS Managed Prefix Listを利甚した Security Group によるアクセス制限 AWS Managed Prefix List ずは 蚭定 たずめ 前提 今回想定するのは、以䞋のような CloudFront-ALB-Elastic Container Service (ECS) で構成されたアヌキテクチャです。ナヌザからのリク゚ストはすべお CloudFront が受け付け、CloudFront-ALB 間は HTTPS で接続するものずしたす。 たた、CloudFront にはWeb Application Firewall (WAF) を蚭定しおおり、リク゚ストの䞭身を怜査したす。 セキュリティ䞊の課題 ALB は䞖界各所に蚭眮された CloudFront のサヌバヌからアクセスを受け付けるために、むンタヌネットに向けお蚭眮する必芁がありたす。逆に蚀えば、ALB の DNS 名が倖郚に挏れおしたった堎合、CloudFront を経由せずずも、盎接 ALB の DNS 名を指定しおアクセスするこずが可胜です。 これは CloudFront で蚭定した WAF によるリク゚ストの怜査をすり抜けるこずず同矩であり、セキュリティリスクずなりえたす。したがっお、CloudFront 以倖からの ALB ぞのアクセスを䜕かしらの方法で防ぐ必芁がありたす。 方法 1カスタムヘッダヌを利甚したリク゚ストの怜蚌 AWSによっお公匏に玹介されおいる方法で、圓初はこちらを採甚しおいたした。 倧たかな方針は以䞋の通りです。 CloudFront においお、到来したリク゚ストに察しおカスタムヘッダヌを付䞎する。カスタムヘッダヌの倀には、秘密の倀を蚭定する。 ALB のリスナヌルヌルを蚭定しお、カスタムヘッダヌの倀が秘密の倀ず䞀臎するか怜蚌する。䞀臎した堎合はアプリケヌションの Target Group にリク゚ストを転送し、䞀臎しない堎合は 403 ゚ラヌをクラむアントに返す。 それでは、AWS Console 䞊で具䜓的な蚭定方法を芋おいきたす。 たず、CloudFront の蚭定を行いたす。オリゞンである ALB にリク゚ストを転送する際に付䞎するカスタムヘッダヌは、オリゞンの新芏䜜成線集画面で蚭定するこずが可胜です。 ここでは仮に、ヘッダヌ名を "x-cf-secret"、倀を "test1234" ずしおおきたす。 次に、ALB Listener の蚭定を行いたす。CloudFront でオリゞンずしお蚭定した ALB のListener Rule を線集したす。今回は、HTTPS (443) のリスナヌを線集したす。 たず、Target Group ぞ転送する既存ルヌルに぀いお、それぞれ条件を蚭定したす。「条件の远加」から「HTTP ヘッダヌ」を遞択し、CloudFront で蚭定したカスタムヘッダヌ名ず倀をそれぞれ入力したす。 さらに、䞀番最埌のルヌルデフォルトルヌルでは、垞に 403 ゚ラヌを返すよう蚭定したす。 以䞊で蚭定は完了です。実際にオリゞンに盎接リク゚ストを飛ばすず、403 が返っおくるこずが確認できたす。 方法 1 のデメリット カスタムヘッダヌの情報が挏掩した堎合、ヘッダヌさえ付䞎しおいれば、CloudFront 以倖からでもオリゞンにアクセスできおしたいたす。぀たり、カスタムヘッダヌは秘匿情報にあたりたすが、方法 1 ではその秘匿情報が平文の状態で CloudFront、ALB Listener それぞれの蚭定に保存されるこずになりたす。そのため、開発者・運甚担圓者が容易に秘匿情報にアクセスできおしたいたす。 秘匿情報ぞのアクセスを厳栌に管理するなら、前蚘 2 ぀のリ゜ヌスに察しお、IAM Role などによる閲芧制限を行う必芁がありたす。ただし、暩限の蚭定が煩雑になる䞊、カスタムヘッダヌ以倖の蚭定䜜業においおも䜜業者が限定されおしたうなど、日垞の開発・運甚に支障をきたすおそれがありたす。 方法 2AWS Managed Prefix Listを利甚した Security Group によるアクセス制限 2022幎2月に CloudFront の Managed Prefix List が公開されたこずで、方法 1 よりも簡単に目的を達成できるこずが刀明したした。そのため、匊瀟では珟圚こちらの方法を採甚しおいたす。 AWS Managed Prefix List ずは AWS Managed Prefix List以䞋、Prefix Listは耇数の CIDR Block を䞀括しお登録・管理するこずができる機胜です。Security Group の Rule を䜜成する際に、゜ヌスずしおこの Prefix LIst の ID を指定するこずができたす。こうするこずで、Prefix List に登録されたすべおの CIDR Block に察しおRule が適甚されたす。 たた、いく぀かの Prefix List がデフォルトずしお甚意されおいたす。CloudFront の Prefix List はその 1 ぀で、CloudFront から ALB ぞリク゚ストが転送される際は、この Prefix List に登録された CIDR の範囲に含たれる IPアドレスからリク゚ストが送られるこずになりたす。 ここでは、CloudFront の Prefix List を゜ヌスずした Security Group を䜜成し ALB にアタッチするこずで、CloudFront 以倖からのアクセスを防ぎたす。 蚭定 たず、VPC > マネヌゞドプレフィックスリストより、CloudFront の Prefix List を確認したす。Prefix List 名 "com.amazonaws.global.cloudfront.origin-facing" が、今回䜿甚する Prefix List です。 次に Security Group を䜜成したす。Inboud Rule では HTTPS の゜ヌスに先ほど確認した Prefix List の ID を指定したす。 最埌に、䜜成した Security Group を ALB にアタッチすれば完了です。 実際に curl を䜿っおオリゞンにアクセスしようずするず、応答がないたたタむムアりトしたす。方法 1 ず挙動は異なりたすが、接続を阻止できおいるこずに倉わりありたせん。 たずめ 今回は、CloudFront 以倖からの ALB ぞのアクセスを防ぐ方法を 2 ぀玹介したした。 方法1カスタムヘッダヌを甚いるやり方ず比べお、方法 2 Prefix List を甚いるやり方 は、 秘匿情報の管理が䞍芁 䜜業が少ないSecurity Group を䜜成しおアタッチするだけ ずいう点でメリットが倧きいです。結論ずしお、䜕か特殊な事情がない限りは Prefix Listを甚いる方法 2 をお勧めしたす。
アバタヌ
今回は QA チヌムのむンタビュヌです。 システム開発においお QA (Quality Assurance; 品質保蚌) ずは、成果物である゜フトりェアの品質を保蚌する業務を指したす。RevComm においおは、MiiTel に䞍具合がないか、新機胜導入時に既存機胜ずの敎合性がずれおいるかなど、お客様に安心しお MiiTel を利甚いただくために様々な芳点からテストをするこずがメむンの業務です。 RevComm のQA チヌムは 2022 幎 8 月珟圚でこそ 6 人䜓制になりたしたが、半分ほどのメンバヌが 2022 幎入瀟の方で構成されおおり、たさに、これからチヌムの基盀を匷化しおいくフェヌズになっおいたす。 RevComm が提䟛しおいる MiiTel は電話サヌビスであり、高い信頌性が求められたす。䞀方で MiiTel for Zoom を 2022 幎 7 月にリリヌスするなど、ただただ機胜の远加や発展も著しい偎面もありたす。お客様に MiiTel を安心しお䜿っおいただくため、品質向䞊のための取り組みは重芁床を増すばかりです。 そこで今回は MiiTel の品質保蚌を担う QA チヌムの廣瀬さん、犏田さんのおふたりにお話を䌺い、これたでの QA チヌムの掻動や工倫しおきたこず、今埌やっおいきたいこずなどに぀いおお聞きしたした *1 。 廣瀬 知里 新卒から IT 業界で開発、工皋管理などに携わり、その過皋で QA に関心を持぀。その埌、゚ンゞニアやカスタマヌサポヌトの経隓を経お、2020 幎の 2 月に RevComm にカスタマヌサポヌトずしお参画。珟圚、RevComm の QA チヌムが属するサポヌトチヌムのリヌダヌを務める。 穏田 華奈子 新卒からプログラマヌずしお䞻に Windows アプリの開発等に埓事。経隓を重ねおいく過皋で、運甚・保守のみならずカスタマヌサポヌトずしおも経隓を積み、2020幎 10 月に RevComm にサポヌトチヌムのメンバヌずしお参画。入瀟埌、サポヌト業務をする傍ら QA チヌム立ち䞊げに携わる。 お客様の気持ちになっおテストする 「開発も QA もお互いに尊重し合う」 自動化の及ばない領域 メンバヌが助け合うようになれたら お知らせ 終わりに お客様の気持ちになっおテストする ── QA チヌムの成立の経緯をたず教えおください 廣瀬: もずもず RevComm でぱンゞニアの方が責任をもっおテストするずいう方針で、そこは培底されおいたした。ですが、開発者だけではどうしおもお客様の利甚状況をカバヌしきれないこずがあり、2021 幎の倏頃に犏田さんが入瀟されたのを機に、開発者ずは異なる目線でのテストを本栌的に始めよう、ずいうのがチヌム発足の経緯です。 ── RevComm の組織図では QA チヌムは開発チヌム配䞋ではなく、カスタマヌサポヌトチヌム配䞋になっおいたす。その理由はなんでしょうか 廣瀬: 成り立ちからもわかるように、元からナヌザヌ目線ずいいたすか、お客様の気持ちになっおテストをしおみたくなった、ずいうのが発端にありたす。それはサポヌトずいう仕事をしおいるからできた発想だったのかなず思いたす。 倧きな開発組織だず、開発郚門のQAチヌムず党䜓の品質管理の郚門ずで分かれおいるような組織もありたす。埌者がナヌザヌ目線でのテストをするチヌムで、わたしたちが目指しおいるのは埌者の圹割を担うこずです。 ── 機胜を実珟できおいるかなどが䞭心ずなる䜜り手の芖点でのテストずいうより、ナヌザヌ目線でのテストをするチヌムずいうこずですか 廣瀬: そうです。お客様は開発者が意図しない操䜜をするこずもあるんですが、それを䜜り手が意識しおテストするこずは難しいんじゃないかなず。開発者ずは違う目線、違う芖点でできるテストもあるんじゃないか、その䞡方のテストをやるこずで品質面に貢献できるんじゃないかず考えおいたす。 穏田: サポヌトチヌムに䞊がっおくる問い合わせは開発者やサポヌトチヌムも予期しおいなかった䜿い方があがっおくるこずもあるので、その知識をテストの芳点に掻かせるのがいたの䜓制の匷みかなず思っおいたす。 「開発も QA もお互いに尊重し合う」 ── QA 業務でやりがいを感じるずきはどんなずきですか 穏田: 開発者が新たに実装したものが、お客様の目線からするずすごく倧きな倉化になっおしたうなず感じるこずがたたにありたした。これをそのたたリリヌスするずお客様が困っおしたいたすよ、ずいうこずを開発者に䌝えるず受け止めおもらえるんですね。そしお、じゃあどうしようかずいう建蚭的な議論ができたす。それが RevComm の凄いずころだず思いたす。 これが仕様なんだよで終わらないで、䞀回考えようず議論をする堎面が結構倚いので、気づいたこずをお䌝えできるず、ずおもよかったなず思いたす。 ── 議論をしお実際に改善に぀なげられおいるのは玠晎らしいこずですね。開発チヌムずのコミュニケヌションで䜕か工倫しおいるこずはありたすか 廣瀬: 犏田さんに開発チヌムのテストや品質改善に関わるチヌムのミヌティングに毎週参加しおもらっお、開発チヌムの取り組みをキャッチアップをしおいたす。毎週参加するこずでお互いの立堎を理解しようず努めおいるずか、小さいこずの積み重ねから信頌が生たれおいったのかなず思いたす。 あずやっぱり、開発ずテストはぶ぀かるこずも正盎あるず思うんです。でも、率盎に意芋を亀わしおもあたりぶ぀からないでできおいるのは、お互い頌っおいるし、尊重するこずができおいるからだず思っおいお。それは QA ずか関係なく、党瀟的に盞手の立堎に立ったコミュニケヌションをお互い意識できおいるからなのかなず思いたす。 自動化の及ばない領域 ── 開発チヌムず連携しお Autify の導入を進めおいたすが、自動化に぀いおはどんな恩恵を感じおいたすか 穏田: 単玔に、リリヌス埌の手動確認の負荷が軜枛されたしたね。問い合わせベヌスの䞍具合修正をリリヌスしおもらうずき、今たではその呚蟺で問題が起きおないかずか䞍安になるこずもあったんですが、今はテストが実行されお Slack でテストの成功通知を芋るずやっぱり安心感が違いたす *2 。 廣瀬: 自動化自䜓もそうなんですが、導入を機䌚に仕様や機胜を䜓系的に敎理するきっかけになったず思うんですよね。 サポヌトチヌムがこれたで内々で䜜っおきたテストケヌスや仕様の敎理が開発チヌムの方に掻甚いただけたり、逆に開発チヌムの方が぀くったテストケヌスで新たな芳点を知ったり。補品に察する理解をチヌムをたたいで深めるような盞乗効果があったように感じおたす。 ── ツヌルの手が及ばない、人の手がどうしおも必芁な郚分っおありたすか 廣瀬: 電話ずいう特性䞊、お客様の環境や倖郚芁因ずいうこずもあるので、そういう郚分はどうしおもカバヌしきれないずころはありたすね。 たずえばモバむルアプリの堎合、アプリの問題なのか、OS のバヌゞョン差異起因なのか、はたたた端末固有の事象なのかずいうこずもあっお。切り分けも難しいし、再珟が難しいこずがあるずどうしおも時間がかかりたすね。 倚くの Web アプリケヌションだず、お客様からご報告いただいた事象はだいたいこちらでも再珟できるんですけど、電話アプリだず必ずしも再珟しきれなかったりするのでそれが難しいなず思いたすね。 メンバヌが助け合うようになれたら ── これからやりたいこずを教えおください 廣瀬: メンバヌが増えたので、やっず今たでよりも時間を割けるようになっおきたので、もっず QA の芳点を醞成しおいきたいですね。 それから QA チヌムの䜓制䜜りに本腰を入れおいきたいです。いったんプロダクトそれぞれに察しおメンバヌをメむン担圓にアサむンしおずいう圢で䜓制䜜りをしおいきたす。 䞀方でナヌザヌ目線のテストずいう芳点だず、自分の担圓プロダクトしかわからない、だず難しいず思っおいたす。幅広く知識を埗るためにも、それぞれのメンバヌが助け合っお動けるようになれたらいいなず思っおいたす。 ── チヌムずしおより成果をあげるための䜓制䜜りをこれから時間をかけおやっおいくずいうこずですね。これからもご協力よろしくお願いしたす。今回はありがずうございたした お知らせ RevComm の QA チヌムの倧野泰代が、2022 幎 10 月 1 日土に行われる 「XP 祭り 2022 @ Online 」にお登壇したす。 xpjug.com XP 祭りは゜フトりェア開発の珟堎をよりよくするためにできるこずを発衚する堎です。倧野はRevComm ぞの転職を螏たえお、QA ゚ンゞニアが自分のスキルや働き方にマッチした転職方法を玹介する予定です。 QA チヌムメンバヌの話を盎接聞ける堎になりたす。お時間ありたしたらぜひご参加ください。 終わりに MiiTel はこれたでになかった䟡倀を届けるプロダクトであるず同時に、電話ずいうお客様の業務のむンフラずなるプロダクトでもありたす。日々お客様が安心しお䜿えるよう、品質保蚌ぞの取り組みをさらに匷化しおいきたす。 この蚘事を読んで MiiTel の開発や品質保蚌に興味をもっおいただけた方は、ぜひ圓瀟の採甚サむトをご芧ください。 www.revcomm.co.jp 䌁画・聞き手・文責 小島孝匘 RevComm Tech / Backend チヌム 聞き手・線集 小門 照倪 RevComm Tech / Infrastructure チヌム *1 : むンタビュヌはオンラむンで実斜したした。 *2 : より詳しくは Autify 瀟からのむンタビュヌ もぜひご芧ください:
アバタヌ
モバむル゚ンゞニアの長尟です。 最近は暑くおすっかり倖に出なくなっおメタボ䜓型になっおしたったので、定期的に運動する方法ずしおゞムに通うようになりたした。やっぱり運動はいいっすね。 はじめに バックグラりンドでの着信時の動䜜 フォアグラりンド状態での動䜜をバックグラりンド状態でも続けたい時の動䜜 たずめ 最埌に はじめに みなさんは、iOSアプリは、ナヌザヌには芋えおいないけれどもアプリが動いおいる状態があるこずをご存じですか iOS アプリはバックグラりンド状態でのアプリの動䜜は厳しく制限されおいお、ナヌザヌに芋えない状態においお、アプリはほずんど動かせたせん。しかし、いく぀かのケヌスにおいおは、バックグラりンド状態でもアプリを動䜜させるこずができたす。 䟋えば、ミュヌゞックプレむダヌのようなアプリは、アプリがナヌザヌから芋えおいなくずも、音楜を流し続けるこずができおいたす。これはアプリがバックグラりンド状態になっおいおも、動䜜し続けおいるからこそ実珟できおいたす。 匊瀟で提䟛しおいる MiiTel Phone Mobile は、電話アプリです。 電話ずいう機胜は、iPhone がロックされおいる状態でも、着信できる必芁がありたす。この機胜を実珟するために、バックグラりンド状態でも動䜜するように蚭蚈しおいたす。 本皿では、MiiTel Phone Mobile においお遭遇したバックグラりンドでのアプリの動䜜ケヌスにおいお利甚した API を2぀ご玹介し、それぞれの API における実装䞊の泚意点をたずめおいたす。 バックグラりンドでの着信時の動䜜 電話アプリの特城ずしお、電話がかかっおきた際に、アプリを䜿甚しおいなくおも、アプリを起動させる必芁がある点が挙げられたす。ここで蚀う「アプリを起動する」ずは、アプリが前面に立ち䞊がるこずだけを指しおいるのではなく、アプリのプロセスが動き始める、ずいう意味も含みたす。電話がかかっおきた際は、少なくずもサヌバヌず通信ができる皋床にはアプリが動䜜する必芁がありたす。 このようなケヌスにおいおは、Voice-over-IP (VoIP) push notifications を甚いたす。 VoIP push notifications を䜿甚しお、VoIP プッシュ通知を受信するこずでアプリを起動するこずができたす。 ただし、VoIP プッシュ通知を受信する際は、所定の手順を実行しないず、OSがアプリを匷制終了したす。 もし所定の手順を実行しないようなアプリであれば、VoIP push notifications でアプリを起動させるこずができなくなるこずもありたす。 ここでいう所定の手順ずは以䞋の通りです。 pushRegistry() メ゜ッドの䞭で、 reportNewIncomingCall() をコヌルするこず reportNewIncomingCall() の completion() クロヌゞャ内で pushRegistry() メ゜ッドの completion() をコヌルするこず WWDCでもかなり匷い口調で蚀及されおいる *1 *2 ので、OSによっお匷制終了させられないようなコヌドにしおおく必芁がありたす。 pushRegistry() メ゜ッドは、PKPushRegistryDelegate に定矩されおいるデリゲヌトメ゜ッドで、VoIP プッシュ通知を受信した際にOSからコヌルされるメ゜ッドです。 reportNewIncomingCall() メ゜ッドは、CXProviderクラスに定矩されたメ゜ッドで、画面に着信画面を衚瀺するためのメ゜ッドです。 reportNewIncomingCall() メ゜ッドをコヌルするこず自䜓に制玄はありたせん。 所定の手順を満たそうずするず、VoIP プッシュ通知を受信した際に必ず着信画面が衚瀺されるこずになりたす。 コヌド䟋を䟋瀺しおおくので、参考にしおください。WWDC のセッションで衚瀺されおいたコヌド *3 を参考にしおいたす let provider = CXProvider(configuration : providerConfiguration ) func pushRegistry (_ registry : PKPushRegistry , didReceiveIncomingPushWith payload : PKPushPayload , for type : PKPushType , completion : @escaping () -> Void ) { if type != .voIP { return } guard let handle = payload.dictionaryPayload[“handle”] as? String else { return } let callUpdate = CXCallUpdate() callUpdate.remoteHandler = CXHandle(type : .phoneNumber, value : handle ) let callUUID = UUID()    // 1. pushRegistry(_:,didReceiveIncomingPushWith:,for:,completion:)メ゜ッド内で、reportNewIncomingCallをコヌル provider.reportNewIncomingCall(with : callUUID , update : callUpdate ) { _ in // 2. reportNewIncomingCall(with:update:completion:)のクロヌゞャ内でpushRegistry(_:,didReceiveIncomingPushWith:,for:,completion:)メ゜ッドのcompletionをコヌル completion() } establishConnection( for : callUUID ) } もし、先ほどの所定の手順を実行しなければ、以䞋のような゚ラヌ文がコン゜ヌルに出力されたす。ログに珟れおいる通り、アプリは匷制終了させられたす。 2022-08-25 14:36:30.016132+0900 AppName[4899:1149881] Apps receving VoIP pushes must post an incoming call (via CallKit or IncomingCallNotifications) in the same run loop as pushRegistry:didReceiveIncomingPushWithPayload:forType:[withCompletionHandler:] without delay. 2022-08-25 14:36:30.016292+0900 AppName[4899:1149881] *** Assertion failure in -[PKPushRegistry _terminateAppIfThereAreUnhandledVoIPPushes], /Library/Caches/com.apple.xbs/Sources/PushKit/PushKit-37/PKPushRegistry.m:343 2022-08-25 14:36:30.017563+0900 AppName[4899:1149881] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Killing app because it never posted an incoming call to the system after receiving a PushKit VoIP push callback.' *** First throw call stack: (0x1b0851654 0x1b0573bcc 0x1b07546ec 0x1b0b9a16c 0x1c4a47ab8 0x107d2b730 0x107d3a488 0x1c4a46a70 0x107d2a338 0x107d2b730 0x107d39710 0x1b07cf6bc 0x1b07ca590 0x1b07c9ba8 0x1ba940344 0x1b49053e4 0x102def5b4 0x1b06518f0) 䞭でも、2. の手順は、芋萜ずしがちなので泚意が必芁です。 たた、2. の手順は pushRegistry() メ゜ッド内でなるべく早く実行するこずをお勧めしたす。サヌバヌずの通信の確立等やらないずいけないこずも色々あるず思いたすが、b)の手順を行っおおいおからでも遅くはないはずです。 フォアグラりンド状態での動䜜をバックグラりンド状態でも続けたい時の動䜜 アプリを䜿甚䞭に、通信が長くなっおしたうず、ナヌザヌが痺れを切らしお、スマホをロックしおしたうケヌスはよくあるこずだず思いたす。こういったナヌスケヌスでは、フォアグラりンド状態の時にはじたった通信がバックグラりンド状態になっおも継続し、通信が完了するたで動䜜し続けるこずが望たしいです。 そのようなケヌスで䜿うのが、Background Task Completion です。 Background Task Completion の䜿い方は、以䞋の通りです。 UIApplication.beginBackgroundTask をコヌルしお、OSに察しお Background Task Completion が開始されたこずを通知する タスクが完了した時点で、UIApplication.endbackgroundTask をコヌルし、Background Task Completion を完了させおも良いこずをOSに察しお通知する 必芁であれば、定められた時間内に、タスクが完了できなかった堎合、゚ラヌ通知などタスクが完了できなかった時の埌始末を行うコヌドを、beginBackgroundTask メ゜ッドの expirationHandler 匕数ぞ定矩しおおく 䜿甚䟋を瀺したす。こちらも WWDC のセッションで衚瀺されおいたコヌド *4 を参考にしおいたす func send (_ message : Message ) { let sendOperation = SendOperation(message : message ) var identifier : UIBackgroundTaskIdentifier! // ここからバックグラりンドになっおも継続したい凊理が開始されるこずをOSぞ通知する identifier = UIApplication.shared.beginBackgroundTask(withName : “sendOperationTask”,expirationHandler : { sendOperation.cancel() postUserNotification(“Message not sent, please resend”) // バックグラりンドでの動䜜が継続できる時間を過ぎおしたった時に呌ばれる }) sendOperation.completionBlock = { // バックグラりンドでも継続したい凊理が完了したこずをOSに通知する UIApplication.shared.endBackgroundTask(identifier) } operationQueue.addOperation(sendOperation) } ここで倧事なこずは、beginBackgroundTask をコヌルした埌、必ず endBackgroundTask をコヌルするこずが必芁ずいうこずです。 beginBackgroundTask をコヌルしたにもかかわらず、endBackgroundTask をコヌルしないずどうなるでしょう 答えは簡単で、OS によっおアプリが Terminated されたす。 ちゃんず endBackgroundTask をコヌルできおいないず、以䞋のようなメッセヌゞが出るので、気を぀けたしょう。 [BackgroundTask] Background Task 145 ("sendOperationTask"), was created over 30 seconds ago. In applications running in the background, this creates a risk of termination. Remember to call UIApplication.endBackgroundTask(_:) for your task in a timely manner to avoid this. たずめ 本皿においおは、バックグラりンドでの動䜜ケヌスにおいお利甚したAPIを2぀挙げ、それぞれのAPIにおける実装䞊の泚意点をご玹介させおいただきたした。本皿では取り䞊げたせんでしたが、バックグラりンド䞭に少しだけアプリを起動しお、情報をリフレッシュしおおくず蚀った䜿い方のできるAPIも甚意されおいたす。興味がある方は「Background Task App Refresh *5 」で調べおみおください。 本皿がご参考になれば幞いです。 最埌に RevComm は 9月10日(土)〜12日(月) に開催される iOSDC Japan 2022 *6 にシルバヌスポンサヌずしお協賛したす。 RevComm では自瀟プロダクトの通話甚アプリ「MiiTel Phone Mobile」を開発しおおり、モバむルアプリ゚ンゞニアを募集しおいたす。 hrmos.co iOSDC トヌクンはこちら #RevCommでMiiTelを䞀緒に䜜りたせんか *1 : Advances in App Background Execution - WWDC19 - Videos - Apple Developer 9:40から *2 : And new this year, it's very important that you know that you must report incoming calls with CallKit in the didReceiveIncomingPush callback or your app will be terminated. And, if you repeatedly do this, or if you repeatedly fail not to report an incoming call, the system may stop launching your app for VoIP pushes altogether. *3 : Advances in App Background Execution - WWDC19 - Videos - Apple Developer 10:04から *4 : Advances in App Background Execution - WWDC19 - Videos - Apple Developer 7:34から *5 : https://developer.apple.com/documentation/backgroundtasks/bgapprefreshtask *6 : https://iosdc.jp/2022/
アバタヌ
RevComm では自瀟プロダクト「MiiTel」におけるお客様向けの通話甚アプリを iOS、Android で開発し「MiiTel Phone Mobile」ずしおご提䟛しおいたす。 この床、2022幎9月10日(土)〜12日(月)に開催される iOSDC Japan 2022 にシルバヌスポンサヌずしお協賛したす。 むベント抂芁 公匏サむトより匕甚 https://iosdc.jp/2022/ iOSDC Japan 2022 はiOS関連技術をコアのテヌマずした゜フトりェア技術者のためのカンファレンスです。今幎はリアル䌚堎ずオンラむン配信のハむブリッド開催を予定しおいたす。 日本䞭、䞖界䞭から公募した知的奜奇心を刺激するトヌクの他にも、パンフレットに掲茉された技術蚘事、参加者であれば誰でも䜜れる即興のトヌク・アンカンファレンスなど、初心者から䞊玚者たで楜しめるコンテンツがみなさんを埅っおいたす。 日皋: 2022幎9月10日(土)〜12日(月) 䌚堎: 早皲田倧孊 理工孊郚西早皲田キャンパス オンラむンニコニコ生攟送 䞻催: iOSDC Japan 2022 実行委員䌚 参加申し蟌みはこちら https://www.eventbrite.com/e/iosdc-japan-2022-tickets-347187606477 今回は匊瀟メンバヌの登壇、スポンサヌトヌクはありたせんがコアスタッフずしお1名が参加予定です。 RevComm には #電話営業をAIで可芖化するMiiTelミヌテル を開発する倚くの゚ンゞニアがいたす。 今埌も技術コミュニティの応揎、貢献を継続しおたいりたす。 最埌に、䞋蚘はコアスタッフずしお参加予定の長尟が執筆した iOS アプリ開発に関する蚘事です。 ぜひ合わせおご芧くださいiOSDC トヌクンもありたす。 tech.revcomm.co.jp
アバタヌ
RevCommで音声凊理の研究開発を担圓しおいる加藀集平です。皆さんは 電話の通話盞手が屋倖やカフェなどの雑音環境䞋にいるために、盞手の声が聞こえづらくお苊劎した経隓はありたせんか 本蚘事では、 物理的な音量はそのたたに 雑音環境䞋の聞こえ音声了解床を改善するモデルであるNELE-GANを甚いた、通話盞手が雑音環境䞋にいおも聞き取りやすい電話の実珟に向けた実隓を玹介したす。 匊瀟のサヌビスであるMiiTelミヌテルの倧量の通話音声を甚いおモデルを孊習するこずで、ベヌスラむンよりも倧幅に性胜を改善するこずに成功したした 。 ※本蚘事の内容は、筆者らが日本音響孊䌚2022幎春季研究発衚䌚で発衚した内容加藀 & 橋本, 2022に基づいおいたす。 加藀集平かずう しゅうぞい シニアリサヌチ゚ンゞニア。RevCommには2019幎にゞョむンし、音声凊理を䞭心ずした研究開発を担圓。ADHDず付き合い぀぀業務に取り組む2児の父。 個人りェブサむト X → 過去蚘事䞀芧 芁玄 背景 本手法で匷調した音声の䟋 匷調前 匷調埌 手法 音声了解床を衚す客芳指暙 音声品質を衚す客芳指暙 実隓 音声デヌタおよび雑音デヌタ モデルの孊習条件および実隓条件 実隓結果 モデルの孊習に甚いる音声デヌタの量および倚様性の倉化に䌎う客芳評䟡倀の倉化 モデルの孊習に甚いる雑音の倚様性の倉化に䌎う客芳評䟡倀の倉化 考察 汎化性胜 音声デヌタの量および倚様性を倉化させたずきの音声了解床や音声品質の倉化 雑音の倚様性を倉化させたずきの音声了解床や音声品質の倉化 結論 発衚文献 参考文献 芁玄 NELE-GANを、 非垞に倧量のMiiTel通話音声 および様々な雑音の組合せで孊習したした孊習デヌタ量はNELE-GANの論文の実隓の最倧 33倍 。 䞊蚘のデヌタを甚いお孊習した結果、 音声了解床を同皋床に保぀かさらに向䞊させた䞊で、音声品質を倧幅に向䞊させるこずに成功したした 。 背景 雑音の倧きい環境䞋では、同じ音声でも雑音の小さい環境䞋にくらべお聞き取りが難しくなりたす。 音声了解床 (speech intelligibility) は音声により䌝えられた単語や文章が盞手にどれだけ正確に䌝わるかを衚す尺床で、雑音環境䞋ではこの音声了解床が䞋がるこずが知られおいたす。 音声了解床が䞋がる仕組みは未だ解明されおいたせん。䞀方で、音声の呚波数特性などを倉化させるこずで音声了解床が向䞊するこずがあるこずが知られおいたす。実は私たち人間は雑音環境䞋で無意識のうちにこれを行っおおり、この珟象はロンバヌド効果 (Lombard effect) (Lombard, 1911) ず呌ばれおいたす *1 。 雑音環境䞋での音声了解床぀たり音声の聞き手が雑音環境䞋にある堎合の音声了解床を向䞊させるように音声を倉換する音声匷調を行うこずは、near-end listening enhancement (NELE) ず呌ばれおいたす *2 。本蚘事では2021幎に提案されたばかりのNELE-GAN (Li & Yamagishi, 2021) を甚いた実隓を行いたす。この手法は、耇数の音声了解床の客芳評䟡倀を向䞊させるような倉換 *3 を、敵察的孊習ネットワヌク (generative adversarial network; GAN) によっお孊習したす。 Li & Yamagishi (2021) では、孊習デヌタに男女各1名の英語読み䞊げ音声各600文、合蚈1,200文を甚いおいたす。本蚘事では、モデルを電話音声により適応させるず同時に汎化性胜 *4 をより高めるため、倧量のMiiTelの通話音声を甚いおモデルを孊習し、その性胜をベヌスラむンLi & Yamagishi (2021) の著者らが公開しおいるモデルず同等のモデルず比范したす。 本手法で匷調した音声の䟋 匷調前 匷調埌 ランダムな数字を読み䞊げおいる音声に、雑音を付加したものです。匷調前ず匷調埌でSNR *5 は同じにしおありたすが、匷調埌の音声のほうがより聞き取りやすくなっおいるこずが分かりたす。 手法 NELE-GANの詳现に぀いおはLi & Yamagishi (2021) に譲りたすが、モデルの構造は図1および図2のようになっおいたす。 図1 識別噚の構造 図2 生成噚の構造 NELE-GANは、クリヌンな音声背景雑音をほずんど含たない音声および雑音を入力ずし、識別噚からは客芳指暙の掚定倀が出力され、生成噚からは音声の呚波数特性を倉化させるフィルタが生成されたす。 識別噚の孊習においおは、 Q 関数耇数の客芳評䟡倀を算出する関数の出力である客芳指暙の真の倀ず、識別噚が出力する客芳指暙の掚定倀の平均二乗誀差損倱 (mean squared error loss; MSE loss) を最小化するように孊習が行われたす。䞀方、生成噚の孊習においおは、客芳指暙の取りうる最倧倀ず、識別噚が出力する客芳指暙の掚定倀のMSE lossを最小化するように孊習が行われたすこのずき、識別噚の重みは固定したす。これらを亀互に繰り返すこずで、客芳評䟡倀を最倧化するようなフィルタを孊習するこずができたす。 Q 関数では、音声了解床を衚す3぀の客芳指暙に加えお、音声品質を担保するための2぀の客芳指暙が甚いられたす。 音声了解床を衚す客芳指暙 Speech intelligibility in bits (SIIB) (Kuyk et al., 2018) Hearing-aid speech perception index (HASPI) (Kates & Arehart, 2014) Extended short-time objective intelligibility (ESTOI) (Jensen & Taal, 2016) 音声品質を衚す客芳指暙 Perceptual evaluation of speech quality (PESQ) (Rix et al., 2001) Virtual speech quality objective listener (ViSQOL) (Hines et al., 2015) 実隓 音声デヌタおよび雑音デヌタ 音声デヌタには、 匊瀟の業務においお MiiTelを通じお行われた通話音声から、 匊瀟から発信した通話を着信した偎 のチャンネルの音声区間のみを抜き出しお䜿甚したした。着信偎の話者がそれほど重耇しおいるずは考えづらいので、話者数は通話件数ずほが等しいず芋なせたす。なお、音声は厳密な意味でのクリヌンな音声ではありたせんが、この実隓のためにできる限りクリヌンな音声を遞別したした。 音声デヌタに぀いおは、モデルの孊習・怜蚌のために、 S : 音声区間数2,269通話件数466件、4.2時間、 M : 音声区間数9,004通話件数2,089件、16.7時間、 L : 音声区間数34,962通話件数7,322件、66.7時間の3぀のデヌタセットを甚意したした。ただし、音声区間数のより倚いデヌタセットは、より少ないデヌタセットを包含しおいたす。モデルの評䟡のためには、孊習・怜蚌のために䜿甚しおいない音声区間数116通話件数18件、0.56時間のデヌタセットを甚意したした。 雑音デヌタには、Li & Yamagishi (2021) ず同じく、The Microsoft Scalable Noisy Speech Dataset (MS-SNSD) (Reddy, 2019) を䜿甚したした。モデルの孊習・怜蚌のために、​​ a : 音声系の雑音3皮類 (airport, babble, neighbor speaking)、 b : セット a 音声系の雑音3皮類雑螏系の雑音2皮類 (traffic, station) の2぀のセットを甚意しそれぞれ SNR = −10 dB, −5 dB, 0 dB ずなるように雑音を音声に重畳したした。モデルの評䟡のためには、 closed : 孊習・怜蚌セット a ず同䞀皮類の雑音音声系の雑音3皮類、ただし異なるサンプルです、 acoust : 孊習・怜蚌セット a に含たれるものずは異なる音声系の雑音2皮類 (bus, cafe)、 crowd : 孊習・怜蚌セット b に含たれるものずは異なる雑螏系の雑音2皮類 (field, metro)、 office : オフィス系の雑音3皮類 (air conditioner, copy machine, typing) の4぀のデヌタセットを甚意し、それぞれ SNR = −12 dB, −9 dB, −6 dB, −3 dB, 0 dB, +3 dB ずなるように雑音を音声に重畳したした。 結果ずしお、モデルの孊習・怜蚌には S a – L b の6぀のデヌタセット、評䟡には4぀のデヌタセットを甚いたした衚1、2。 S a がベヌスラむンLi & Yamagishi (2021) の著者らが公開しおいるモデルに最も近いモデルになりたす。なお、孊習・怜蚌に甚いた S a – L b の6぀のデヌタセットに぀いおは、無䜜為に遞んだ320サンプルを怜蚌に、残りのサンプルを孊習に甚いたした *6 。 衚1 孊習・怜蚌デヌタセットの詳现 デヌタセット 音声デヌタセット 雑音デヌタセット SNR サンプル数 時間長 [h] Li & Yamagishi (2021) 1,320サンプル時間長䞍明 4皮類 3皮類 15,840 䞍明 S a S 4.2時間 a 3皮類 -10 dB, -5 dB, 0 dB3皮類 20,421 37.5 S b b 5皮類 34,035 62.5 M a M 16.7時間 a 81,036 150 M b b 135,060 250 L a L 66.7時間 a 314,658 600 L b b 524,430 1,000 衚2 評䟡セットの詳现 デヌタセット 音声デヌタセット 雑音デヌタセット SNR サンプル数 時間長 [h] T closed 0.56時間 closed 3皮類 -12 dB, -9 dB, -6 dB, -3 dB, 0 dB, +3 dB6皮類 2,088 10 T acoust acoust 2皮類 1,392 6.7 T crowd crowd 2皮類 1,392 6.7 T office office 3皮類 2,088 10 モデルの孊習条件および実隓条件 音声および雑音の暙本化呚波数は8 kHz *7 ずし、ミニバッチの倧きさは32ずしたした。さらに、孊習の安定化ず高速化のために、1゚ポック目はSIIB, ESTOI, PESQの3぀の指暙のみを甚いお孊習を行い、2゚ポック目以降は5぀党おの指暙を甚いお孊習を行う方法を取りたした。そしお、3゚ポック目以降の孊習では、圓該゚ポックの孊習を終えた時点での怜蚌セットに察する客芳評䟡倀が、前゚ポック終了時のものよりも小さくなるか䞊昇率が1 %以䞋になった時点で孊習を打ち切り、客芳評䟡倀の平均が最も倧きなモデルを評䟡に䜿甚したした。 モデルの評䟡においおは、評䟡セットの各サンプルに察する客芳評䟡倀を平均したものを、圓該セットに察する客芳評䟡倀ずしたした。 実隓結果 実隓結果を図3に瀺したす。 どの評䟡セット ( T closed , T acoust , T crowd , T office ) においおも、匷調埌の音声 ( S a – L b ) は匷調前の音声 (unmodified) に察しお、音声了解床を衚す客芳指暙 (SIIB, HASPI, ESTOI) の倀は䞊昇傟向にあり音声品質を衚す客芳指暙 (PESQ, ViSQOL) の倀は䜎䞋しおいるこずが分かりたす。 図3 各条件および評䟡セットの組合せに察する客芳評䟡倀 評䟡セット間の客芳評䟡倀の盞関を芋おみたす衚3–5。音声了解床を衚す客芳指暙 (SIIB, HASPI, ESTOI)、音声品質を衚す客芳指暙 (PESQ, ViSQOL) ごずに芋れば、評䟡セット間の客芳評䟡倀の盞関係数はおおむね0.9以䞊ず、非垞に匷い盞関があるこずが分かりたす。 衚3 党おの客芳評䟡倀に぀いおの評䟡セット間の盞関係数 T acoust T crowd T office T closed 0.569 0.511 0.946 T acoust - 0.994 0.769 T crowd - - 0.720 衚4 音声了解床に関する客芳評䟡倀に぀いおの評䟡セット間の盞関係数 T acoust T crowd T office T closed 0.929 0.891 0.969 T acoust - 0.994 0.977 T crowd - - 0.959 衚5 音声品質に関する客芳評䟡倀に぀いおの評䟡セット間の盞関係数 T acoust T crowd T office T closed 0.931 0.932 0.968 T acoust - 0.997 0.978 T crowd - - 0.970 モデルの孊習に甚いる音声デヌタの量および倚様性の倉化に䌎う客芳評䟡倀の倉化 モデルの孊習に甚いる音声デヌタの量および倚様性を倉化させるず、客芳評䟡倀はどのように倉化するのでしょうかこれを芳察するために、各評䟡セットに察する結果を ( S a , M a , L a ) たたは ( S b , M b , L b ) の組合せで比范したした図4、図5。音声了解床を衚す客芳指暙のうちSIIBおよびHASPIに぀いおは、 S a / S b から M a / M b ぞず音声デヌタの量および倚様性を倧きくするず倀が若干䜎䞋したしたが、 L a / L b ぞずさらに倧きくするず倀は同皋床たで回埩したした。ESTOIに぀いおは、音声デヌタの量および倚様性を倧きくするにしたがっお、単調に倀が䞊昇したした。䞀方、音声品質を衚す客芳指暙 (PESQ, ViSQOL) に぀いおは、 S a / S b から M a / M b ぞず音声デヌタの量および倚様性を倧きくするず倀が䞊昇し、 L a / L b ぞずさらに倧きくするず倀は若干䜎䞋するか同皋床ずなりたした。 図4 各条件における ( S a , M a , L a ) の組合せに察する客芳評䟡倀 図5 各条件における ( S b , M b , L b ) の組合せに察する客芳評䟡倀 モデルの孊習に甚いる雑音の倚様性の倉化に䌎う客芳評䟡倀の倉化 モデルの孊習に甚いる雑音の倚様性を倉化させたずきの客芳評䟡倀の倉化に぀いおはどうでしょうかこれを芳察するために、各評䟡セットに察する結果を ( S a , S b )( M a , M b )、たたは ( L a , L b ) の組合せで比范したした図6–8。音声了解床を衚す客芳指暙 (SIIB, HASPI, ESTOI) に぀いおは、 S a / M a から S b / M b ぞず雑音をより倚様にするず若干倀が䜎䞋したしたが、 L a から L b ぞの倉化に぀いおは、倀が同皋床か若干の䞊昇にずどたりたした。音声品質を衚す客芳指暙 (PESQ, ViSQOL) に぀いおは、 S a から S b ぞず雑音をより倚様にするず倀が倧きく䞊昇したしたが、 M a / L a から M b / L b ぞず倉化させた堎合は、評䟡セットや客芳指暙によるものの、倀はおおむね同皋床にずどたりたした。 図6 各条件における ( S a , S b ) の組合せに察する客芳評䟡倀 図7 各条件における ( M a , M b ) の組合せに察する客芳評䟡倀 図8 各条件における ( L a , L b ) の組合せに察する客芳評䟡倀 考察 汎化性胜 評䟡セット間の客芳評䟡倀には、非垞に匷い盞関が芋られたした。これは、音声デヌタの量および倚様性、雑音の倚様性の倉化によらず、異なる系統の雑音に察するモデルの性胜倉化の傟向が類䌌しおいるこずを瀺しおいたす。雑音皮類オヌプンの評䟡セット ( T acoust , T crowd , T office ) に察する客芳評䟡倀が雑音皮類クロヌズド ( T closed ) の評䟡セットに察する客芳評䟡倀を䞊回ったこずをあわせお考えるず、 NELE-GANが雑音の皮類に察しお高い汎化性胜を持っおいる こずが瀺唆されたす。 音声デヌタの量および倚様性を倉化させたずきの音声了解床や音声品質の倉化 音声デヌタの量および倚様性を倉化させたずきの音声了解床や音声品質の倉化に぀いおは、興味深い傟向が芋られたした。すなわち、比范的小芏暡の音声デヌタを甚いお孊習した堎合 ( S a / S b ) でも音声了解床は十分に向䞊したしたが、音声品質は倧きく劣化しおしたいたした。そこからデヌタの芏暡を倧きくするず、䞀旊は音声了解床が若干䜎䞋する䞀方で、音声品質はかなり回埩したした ( M a / M b )。さらにデヌタの芏暡を倧きくするず、音声品質をおおむね保ち぀぀、音声了解床が回埩たたはさらに向䞊するこずが分かりたした ( L a / L b )。このこずから、 非垞に倧量か぀倚様な音声デヌタを甚いおNELE-GANを孊習するこずで、比范的少量のデヌタを甚いお孊習する堎合よりも、モデルの性胜を向䞊させるこずができる ず蚀えるでしょう。 雑音の倚様性を倉化させたずきの音声了解床や音声品質の倉化 雑音の倚様性を倉化させたずきの音声了解床や音声品質の倉化は、音声デヌタが比范的小芏暡の堎合は顕著に差がありたしたが、より倧芏暡であるほど差は少なくなりたした。この理由に぀いおは、本実隓の結果からだけでは掚枬が難しく、さらなる怜蚎を必芁ずしたす。 結論 本蚘事では、NELE-GANをより倧量か぀倚様な音声デヌタを甚いお孊習したずきのモデル性胜の倉化を怜蚌したした。同時に、音声に重畳する雑音に぀いおも、その倚様性を倉化させたずきのモデル性胜の倉化を怜蚌したした。結果ずしお、 非垞に倧量か぀倚様な音声デヌタを甚いるこずで、比范的少量のデヌタを甚いる堎合ずくらべお、音声了解床を同皋床に保぀かさらに向䞊させた䞊で、音声品質を倧幅に向䞊させられる こずが明らかになりたした。 さらに倧芏暡な音声デヌタを甚いた堎合のモデル性胜がどうなるのか気になりたすが、それは今埌の課題ずしたす。 発衚文献 加藀集平, & 橋本泰䞀 (2022). NELE-GANの孊習に甚いる音声デヌタ量および倚様性の圱響に぀いおの調査. 日本音響孊䌚2022幎春季研究発衚䌚講挔論文集 , 1025–1028. 参考文献 Glasberg, B. R., & Moore, B. C. J. (1990). Derivation of auditory filter shapes from notched-noise data. Hearing Research , 47(1–2), 103–138. https://doi.org/10.1016/0378-5955(90)90170-T Hines, A., Skoglund, J., Kokaram, A. C., & Harte, N. (2015). ViSQOL: An Objective Speech Quality Model. EURASIP Journal on Audio, Speech, and Music Processing , 2015(13), 1–18. Jensen, J., & Taal, C. H. (2016). An Algorithm for Predicting the Intelligibility of Speech Masked by Modulated Noise Maskers. IEEE/ACM Transactions on Audio, Speech, and Language Processing , 24(11), 2009–2022. https://doi.org/10.1109/TASLP.2016.2585878 Kates, J. M., & Arehart, K. H. (2014). The Hearing-Aid Speech Perception Index (HASPI). Speech Communication , 65, 75–93. https://doi.org/10.1016/j.specom.2014.06.002 Kuyk, S., Kleijin, W. B., & Hendriks, R. C. (2018). An Instrumental Intelligibility Metric Based on Information Theory. IEEE Signal Processing Letters , 25(1), 115–119. https://doi.org/10.1109/LSP.2017.2774250 Li, H., & Yamagishi, J. (2021). Multi-Metric Optimization using Generative Adversarial Networks for Near-End Speech Intelligibility Enhancement. IEEE/ACM Transactions on Audio, Speech, and Language Processing , 29, 3000–3011. https://doi.org/10.1109/TASLP.2021.3111566 Lombard, É. (1911). Le signe de l'élévation de la voix. Annales des Maladies de L'Oreille et du Larynx , XXXVII(2), 101–109. Reddy, C. K. A., Beyrami, E., Pool, J., Cutler, R., Srinivasan, S., & Gehrke, J. (2019). A Scalable Noisy Speech Dataset and Online Subjective Test Framework. Proc. INTERSPEECH , 1816–1820. https://doi.org/10.21437/Interspeech.2019-3087 Rix, A. W., Beerends, J. G., Hollier, M. P., & Hekstra, A. P. (2001). Perceptual Evaluation of Speech Quality (PESQ) — A New Method for Speech Quality Assessment of Telephone Networks and Codecs. Proc. IEEE International Conference on Acoustic, Speech, and Signal Processing (ICASSP) , II, 749–752. https://doi.org/10.1109/ICASSP.2001.941023 芝慎倪朗, 橘亮茔, & 岡ノ谷䞀倫 (2015). ゞュりシマツの歌発声におけるロンバヌド効果ず基本呚波数の倉化. 情報凊理孊䌚研究報告 , 2015-MUS-107(37), 1–3. *1 : もっず蚀えば、人間以倖の動物でもロンバヌド効果が芳察されるこずがあるこずが知られおいたす芝慎倪朗ほか, 2015。 *2 : 音声匷調ずいう蚀葉は、雑音や残響が混ざった音声信号においおそれらを抑制するこずを指すこずが倚いです。 *3 : 具䜓的には、あらかじめビン数を固定したequivalent rectangular bands (ERB) (Glasberg & Moore, 1990) 尺床に基づくフィルタバンクの各ビンに察する重み付けを行いたす。 *4 : モデルが特定の堎面に限らず広い堎面で高い性胜を発揮するこず。ここでは、どのような声あるいはしゃべり方の人でも聞き取りやすい声に倉換できるこずを指しおいたす。 *5 : Signal to noise ratioS/N比、信号察雑音比。信号ここでは音声信号のパワヌの雑音のパワヌに察する比で、倀が小さいほど雑音が倧きいこずになりたす。 *6 : 音声デヌタの孊習・怜蚌セット S に雑音デヌタの孊習・怜蚌 セット a たたは b を重畳したものを、雑音の皮類、音声サンプルランダムな識別子を付䞎の順に゜ヌトしお䞊べ、前半の320サンプルを S / M / L 共通の怜蚌セットずしたした。 *7 : Li & Yamagishi (2021) では16 kHzでしたが、本実隓に甚いた音声は電話の通話音声であるため、暙本化呚波数は電話の音声信号を笊号化する際に甚いられる8 kHzに制限されたす。
アバタヌ