Upgrade to Pro — share decks privately, control downloads, hide ads and more …

打倒A◯◯a Voice! 音声入力アプリを作ってみた

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

打倒A◯◯a Voice! 音声入力アプリを作ってみた

Avatar for Yuuki Yamashita

Yuuki Yamashita

June 20, 2026

More Decks by Yuuki Yamashita

Other Decks in Technology

Transcript

  1. ΞδΣϯμ 01 σϞ ·ͣಈ͘΋ͷΛ ݟͯ΋Β͍·͢ 02 ࡞ͬͨഎܠ طଘπʔϧͰ͸ ଍Γͳ͔ͬͨཧ༝ 03

    ࢓૊Έ 8IJTQFS ςΩετૠೖ ΞʔΩςΫνϟ 04 "84׆༻ #FESPDL 4USBOET"HFOUT "HFOU$PSF .FNPSZ 05 ֶͼ ྑ͔ͬͨ఺ ۤ࿑ͨ͠఺ ࣦഊஊ 06 ·ͱΊ ݸਓ։ൃͷ୉ޣຯ ࠓޙͷల๬
  2. ͖͔͚ͬ ΍Γ͔ͨͬͨ͜ͱ ͋ΒΏΔೖྗཝʹ Ի੠Ͱೖྗ͍ͨ͠ 4MBDLɾϒϥ΢βɾϝϞɾλʔϛφϧʜͲ͜Ͱ΋ 4MBDL νϟοτ ϒϥ΢β ݕࡧɾೖྗ ϝϞ

    ςΩετೖྗ λʔϛφϧ ίϚϯυೖྗ ʜͦͷଞ͋ΒΏΔΞϓϦ ੠ͰೖྗͰ͖Ε͹ɺ΋ͬͱ଎͘ॻ͚Δ طଘπʔϧͰ͸଍Γͳ͔ͬͨ NBD04ඪ४Ի੠ೖྗ ಛఆΞϓϦͷΈରԠɾΦϑϥΠϯෆՄɾਫ਼౓͕ෆ҆ఆ "RVB7PJDFͳͲطଘπʔϧ ༻్ɾΧελϚΠζ͕ࣗ෼ͷχʔζʹ߹Θͳ͍ #MVFUPPUIϚΠΫԻ࣭໰୊ 04੍໿ͰղܾෆՄɾͲͷπʔϧͰ΋ಉ͡໰୊ ͔ͩΒࣗ෼Ͱ࡞ͬͨ
  3. طଘԻ੠ೖྗͷ໰୊఺ ͲͷπʔϧΛ࢖ͬͯ΋ղܾͰ͖ͳ͔ͬͨ՝୊ NBD04ඪ४Ի੠ೖྗ • ಛఆΞϓϦͷΈରԠ • ΦϑϥΠϯෆՄ ʢཁωοτ઀ଓʣ • ਫ਼౓͕ෆ҆ఆ

    • ΧελϚΠζෆՄ "RVB7PJDFͳͲ طଘπʔϧ • ༻్͕ݶఆత • ΧελϚΠζͷࣗ༝౓͕௿͍ • "*ޙॲཧɾΤʔδΣϯτػೳͳ ͠ • ࣗ෼ͷϫʔΫϑϩʔʹ߹Θͳ͍ #MVFUPPUIϚΠΫԻ࣭໰୊ • ௨࿩Ϟʔυ࣌ʹԻ࣭͕ྼԽ • 04੍໿ͰղܾෆՄ • ͲͷπʔϧͰ΋ಉ͡໰୊ • ༗ઢϚΠΫਪ঑ʢࠜຊղܾʣ ʮࣗ෼ͷ༻్ʹ߹͏πʔϧ͕ͳ͍ͳΒɺ࡞Δ͔͠ͳ͍ʯ
  4. "QFY7PJDFͱ͸ "QFY7PJDF ੠ͰͲ͜Ͱ΋ೖྗͰ͖Δ NBD04πʔϧ NMYXIJTQFSu"NB[PO#FESPDLu4USBOET"HFOUT NBD04"QQFM4JMJDPO ϝχϡʔόʔৗறɾશΞϓϦରԠ 4MBDLɾϒϥ΢βɾϝϞͳͲɺϑΥʔΧε͕͋Δ ೖྗཝͳΒͲ͜Ͱ΋Ի੠ͰςΩετૠೖ ׬શΦϑϥΠϯಈ࡞

    NMYXIJTQFSʢ"QQMF 4JMJDPOઐ༻ʣͰ ϩʔΧϧԻ੠ೝࣝɻωοτෆཁ "*ޙॲཧʢ"NB[PO #FESPDLʣ SBXQPMJTIGPSNBMUSBOTMBUFCVMMFUT ͭͷϞʔυͰจମΛม׵ ΤʔδΣϯτػೳʢ4USBOET "HFOUTʣ Ի੠ͰϦϚΠϯμʔొ࿥ɾϒϥ΢βݕࡧɾԻྔૢ࡞ ΞϓϦىಈ ޠኮֶशʢ"HFOU$PSF .FNPSZʣ ઐ໳༻ޠΛ஝ੵͯ͠ 8IJTQFSͷೝࣝਫ਼౓Λ ܧଓతʹ޲্
  5. Ի੠ೝࣝ Š NMYXIJTQFS "QQMF4JMJDPOઐ༻ ׬શΦϑϥΠϯ .-9ϑϨʔϜϫʔΫ্Ͱಈ࡞ɻωοτϫʔΫෆཁ ͰϓϥΠόγʔΛकΓͳ͕Βߴਫ਼౓ͳԻ੠ೝࣝΛ ࣮ݱɻ Ϟσϧɿ XIJTQFSMBSHFWUVSCP

    ਫ਼౓ͱ଎౓ͷόϥϯε͕࠷ྑɻ೔ຊޠͷઐ໳༻ޠ ΋࣮༻े෼ͳਫ਼౓ͰೝࣝɻϓϩϯϓτώϯτͰิ ڧՄೳɻ 7"%Š 3.4ϕʔεԻ੠۠ؒݕग़ Իྔʢ3.4ʣͰൃ࿩۠ؒΛࣗಈݕग़ɻ࿩࢝͠Ίͱ ࿩͠ऴΘΓΛਖ਼֬ʹ੾Γग़ͯ͠όοϑΝʹ஝ੵɻ ݬௌݕग़ϩδοΫ ແԻ࣌ͷ 8IJTQFSޡೝࣝΛআڈɻ୹͗͢Δɾ܁ Γฦ͠ύλʔϯͷςΩετΛࣗಈͰ஄͘ɻ Ի੠ॲཧϑϩʔ ϚΠΫೖྗ 1Z"VEJPͰϦΞϧλΠϜԻ੠ετϦʔϜऔಘ 7"%ʢԻ੠۠ؒݕग़ʣ 3.4͖͍͠஋Ͱൃ࿩۠ؒΛ੾Γग़͠ ˠόοϑΝʹ஝ੵ NMYXIJTQFSจࣈى͜͠ MBSHFWUVSCP ޠኮϓϩϯϓτώϯτͰߴਫ਼ ౓ม׵ ݬௌϑΟϧλ ˠςΩετग़ྗ ϊΠζޡೝࣝΛআڈͯ͠ޙॲཧ΁౉͢
  6. ͲͷΞϓϦʹ΋ೖྗͰ͖Δ࢓૊Έ /41BTUFCPBSE ΫϦοϓϘʔυॻ͖ࠐΈ 8IJTQFS͕ग़ྗͨ͠ςΩετΛ /41BTUFCPBSE ʹॻ͖ࠐΉɻ 1ZUIPO͔Β௚઀ݺͼग़ͤΔ NBD04ඪ४ "1*Ͱɺ ͲͷΞϓϦͷΫϦοϓϘʔυʹ΋

    ࣮֬ʹηοτͰ͖Δɻ PTBTDSJQU 4ZTUFN&WFOUT $NE 7Ωʔૹग़ "QQMF4DSJQUͰ 4ZTUFN&WFOUT ʹ$NE 7 ΩʔετϩʔΫΛૹग़ɻ ϑΥʔΧεͷ͋ΔΞϓϦʹ ͦͷ··ϖʔετ͞ΕΔͨΊɺ 4MBDLɾϒϥ΢βɾϝϞாͳͲ શΞϓϦͰಈ࡞͢Δɻ -BVODI"HFOU ϩάΠϯ࣌ࣗಈىಈ QMJTUϑΝΠϧͰ d-JCSBSZ -BVODI"HFOUTʹొ࿥ɻ QZBQQͰͷ BQQԽΛஅ೦͠ ͜ͷํࣜʹ੾Γସ͑ͨͱ͜Ζ ҆ఆੑ͕େ෯ʹ޲্ɻ TFUQSPDUJUMFͰʮ"QFY7PJDFʯ ͷ໊લ΋ҡ࣋Ͱ͖Δɻ /41BTUFCPBSE ͰςΩετΛηοτ ˠPTBTDSJQU Ͱ $NE 7 ૹग़ ˠϑΥʔΧεͷ ͋ΔશΞϓϦʹૠೖ
  7. "NB[PO#FESPDLͰޙॲཧ 3"8 ͦͷ··ग़ྗ 8IJTQFSͷೝࣝ݁ՌΛ ͦͷ··࢖༻ɻޙॲཧͳ͠ ೖྗྫ ͑ʔͱɺ͋ͷʔɺ ໌೔ͷձٞʹ͍ͭͯ ͳΜͰ͚͢Ͳ ग़ྗྫ

    ͑ʔͱɺ͋ͷʔɺ ໌೔ͷձٞʹ͍ͭͯ ͳΜͰ͚͢Ͳ 10-*4) ࣗવͳจষʹ ϑΟϥʔΛআڈ͠ɺ ಡΈ΍͍͢จষʹ੔ܗ ೖྗྫ ͑ʔͱɺ͋ͷʔɺ ໌೔ͷձٞʹ͍ͭͯ ͳΜͰ͚͢Ͳ ग़ྗྫ ໌೔ͷձٞʹ͍ͭͯ ͝࿈བྷ͠·͢ɻ '03."- ܟޠɾஸೡޠʹ ࿩͠ݴ༿Λ Ϗδωεܟޠʹม׵ ೖྗྫ ໌೔ͷձٞ ΑΖ͘͠ ग़ྗྫ ໌೔ͷձٞͷ݅ɺ ΑΖ͓͘͠ئ͍ ͍ͨ͠·͢ɻ 53"/4-"5& ӳޠʹ຋༁ ೔ຊޠͷԻ੠Λ ӳޠςΩετʹ຋༁ ೖྗྫ ໌೔ͷձٞʹ͍ͭͯ ͝࿈བྷ͠·͢ɻ ग़ྗྫ *XJMMDPOUBDUZPV SFHBSEJOH UPNPSSPXT NFFUJOH #6--&54 Օ৚ॻ͖ʹ ௕͍࿩͠ݴ༿Λ Օ৚ॻ͖ʹม׵ ೖྗྫ ·໊ͣ݅Λॻ͍ͯɺ ࣍ʹຊจɺ ࠷ޙʹॺ໊ ग़ྗྫ w໊݅Λهೖ wຊจΛ࡞੒ wॺ໊Λ௥Ճ Ϟσϧ $MBVEF)BJLVʢ"NB[PO#FESPDLʣŠ ଎౓༏ઌ
  8. 4USBOET"HFOUTͰΤʔδΣϯτԽ 4USBOET"HFOUT "NB[PO#FESPDLŠ Ի੠Ͱ NBD04Λ௚઀ૢ࡞͢Δ ͭͷϢʔεέʔε 3&.*/%&3 ϦϚΠϯμʔొ࿥ ʮ໌೔ͷ ࣌ʹ

    ϛʔςΟϯάΛϦϚΠϯυ͠ ͯʯ ࣮ߦΞΫγϣϯ NBD04ϦϚΠϯμʔʹ ࣗಈొ࿥ ▸ Ի੠͔Β೔࣌ɾ಺༰Λநग़ ▸ 4USBOET"HFOUT͕πʔϧ ݺͼग़͠ ▸ NBD043FNJOEFST"1* ʹొ࿥ DSFBUF@SFNJOEFS 4&"3$) ϒϥ΢βݕࡧ ʮ"84#FESPDLͷ ྉۚΛௐ΂ͯʯ ࣮ߦΞΫγϣϯ σϑΥϧτϒϥ΢βͰ ࣗಈݕࡧ ▸ ݕࡧΫΤϦΛࣗಈੜ੒ ▸ PTBTDSJQUͰϒϥ΢βىಈ ▸ 63-Λ૊Έཱͯͯ։͘ PQFO@CSPXTFS 70-6.& Իྔૢ࡞ ʮԻྔΛ ʹ ઃఆͯ͠ʯ ࣮ߦΞΫγϣϯ NBD04γεςϜԻྔΛ ௚઀มߋ ▸ ਺஋ɾׂ߹ΛࣗવݴޠͰࢦ ఆ ▸ PTBTDSJQUͰԻྔઃఆ ▸ ϛϡʔτɾϛϡʔτղআ΋ ରԠ TFU@WPMVNF -"6/$) ΞϓϦىಈ ʮ4MBDLΛ։͍ͯʯ ࣮ߦΞΫγϣϯ ೚ҙͷ NBD04ΞϓϦΛ Ի੠Ͱىಈ ▸ ΞϓϦ໊ΛࣗવݴޠͰೝࣝ ▸ PQFOίϚϯυͰىಈ ▸ ΠϯετʔϧࡁΈΞϓϦʹ ରԠ MBVODI@BQQ
  9. "HFOU$PSF .FNPSZͰޠኮΛֶͿ '-08 Ի੠ೖྗ ˠNMYXIJTQFSͰจࣈى͜͠ Ϣʔβʔ͕मਖ਼ ˠਖ਼͍͠ޠኮΛ֬ೝ "HFOU$PSF .FNPSZʹޠኮΛ஝ੵɾอଘ 8IJTQFSϓϩϯϓτώϯτ

    ʹޠኮΛ஫ೖ ೝࣝਫ਼౓͕޲্ ˠ࢖͏΄Ͳݡ͘ͳΔ ύʔιφϥΠζ͞ΕͨԻ੠ೝࣝΛ࣮ݱ 10*/5 υϝΠϯݻ༗ޠͷ஝ੵ +"846(ɺ NMYXIJTQFSɺ 4USBOET"HFOUTͳͲ ٕज़༻ޠɾݻ༗໊ࢺΛࣗಈͰهԱ 8IJTQFS͕ۤखͳޠኮΛิ׬͢Δ ܧଓతͳਫ਼౓վળ ࢖͑͹࢖͏΄Ͳೝࣝਫ਼౓্͕͕Δ Ϣʔβʔͷमਖ਼ϑΟʔυόοΫΛֶश ύʔιφϥΠζ͞ΕͨԻ੠ೝࣝΛ࣮ݱ ࣮૷ͷϙΠϯτ "NB[PO#FESPDL"HFOU$PSF.FNPSZ"1* 8IJTQFSͷ JOJUJBM@QSPNQUύϥϝʔλʹ஫ೖ ϩʔΧϧॲཧ Ϋϥ΢υهԱͷ૊Έ߹Θͤ
  10. "QFY7PJDF8FC ΞʔΩςΫνϟ 7FSDFM ϑϩϯτΤϯυ "1*3PVUFT /FYUKT αʔόʔϨεؔ਺ ཤྺදࣔ 6* 6QTUBTI

    3FEJT,7 Ի੠ೖྗཤྺͷอଘ αʔόʔϨεରԠ ,7ετΞ )551"1*ͰΞΫηε "NB[PO#FESPDL 1ZUIPOαʔόʔϨεؔ਺ $MBVEF)BJLVͰޙॲཧ *".ϢʔβʔΩʔೝূ ػೳͱ՝୊ Ͱ͖Δ͜ͱ Ͳ͔͜ΒͰ΋Ի੠ೖྗཤྺΛ֬ೝ 8FCܦ༝Ͱ #FESPDLޙॲཧΛ ݺͼग़͠ εϚϗ͔Β΋ӾཡՄೳ ۤ࿑ͨ͠఺ 0*%$࿈ܞ͸ઃఆ͕ෳࡶͰஅ೦ *".ϢʔβʔΩʔೝূͰଥڠ ηΩϡϦςΟվળ͕ࠓޙͷ՝୊ ٕज़ελοΫ 7FSDFM /FYUKT 6QTUBTI 3FEJT )551,7 "NB[PO#FESPDL1ZUIPO Ի੠ೖྗཤྺΛͲ͔͜ΒͰ΋֬ೝͰ͖ΔΫϥ΢υ࿈ܞ 8FCΞϓϦ
  11. ࡞ͬͯΈͯΘ͔ͬͨ͜ͱ ✓ ྑ͔ͬͨ఺ ˚ ۤ࿑ͨ͠఺ 8IJTQFSͷΦϑϥΠϯਫ਼౓͸࣮༻े෼ "QQMF4JMJDPO্ͰϦΞϧλΠϜʹ͍ۙ଎౓ɻ ઐ໳༻ޠ΋໰୊ͳ͠ɻ PTBTDSJQUૠೖ͸શΞϓϦͰ҆ఆ /41BTUFCPBSE

    $NE 7 ૹग़Ͱ 4MBDLɾϒϥ΢βɾϝϞா͢΂ͯʹରԠɻ -BVODI"HFOU͸ QZBQQΑΓ҆ఆ ࣗಈىಈɾΫϥογϡ࠶ىಈɾϓϩηε໊දࣔɻ ܰྔͰ࣮֬ɻ QZBQQͰ BQQԽ͸ҵͷಓ QZUIPO[JQഁଛɾ 3PTFUUBμΠΞϩά ʜ࣍ʑͱ໰୊͕ൃੜ͠அ೦ɻ #MVFUPPUIϚΠΫͷԻ࣭͸ 04੍໿ 4$0N4#$ίʔσοΫ΁ͷ੾Γସ͑͸ΞϓϦଆ Ͱ͸ରॲෆՄɻ 8IJTQFSͷݬௌݕग़ϩδοΫ͕ඞཁ ແԻ࣌ʹޡग़ྗɻ 3.4ϕʔε 7"%ʴ܁Γฦ͠ ύλʔϯݕग़Ͱରॲɻ
  12. QZBQQͱͷ֨ಆʢࣦഊஊʣ 1ZUIPOΞϓϦΛ BQQόϯυϧʹ͠Α͏ͱͨ͠࿩ Š ͦͯ͠அ೦ͨ͠࿩ 1 QZBQQͰ BQQԽΛࢼΈΔ ʮ1ZUIPOΞϓϦΛ NBD

    ͷBQQ ʹ͍ͨ͠ʯ QZBQQΛ࢖͑͹Ͱ͖Δ͸ ͣʜ TFUVQQZ Λॻ͍࣮ͯߦʂ QZUIPO[JQഁଛ ىಈ͠ͳ͍ 2 BSNόΠφϦ ϥϯνϟʔ࡞ઓ ʮ[JQ͕յΕΔͳΒ ωΠςΟϒόΠφϦͰ ϥοϓ͢Ε͹͍͍ʂʯ 4XJGUͰ BSNͷ ϥϯνϟʔΛࣗ࡞ͯ͠ BQQʹ૊ΈࠐΉ 3PTFUUBμΠΞϩάग़ݱ ʮ*OUFM༻ΞϓϦʁʯͱ ฉ͔ΕΔ 3 BQQԽΛஅ೦ ʮ1ZUIPOͷ NBD04 BQQԽ͸ҵͷಓʯ ଞͷํ๏Λ୳͢ʜ -BVODI"HFOUͱ͍͏ NBD04ඪ४ͷ࢓૊ΈΛൃ ݟ QZBQQ׬શஅ೦ ํ਑స׵Λܾஅ 4 -BVODI"HFOU Ͱղܾ d-JCSBSZ-BVODI"HFO UTʹ QMJTU Λஔ͚ͩ͘ TFUQSPDUJUMF Ͱ ʮ"QFY7PJDFʯͷϓϩη ε໊Λҡ࣋ Ϋϥογϡ࣌΋ࣗಈ࠶ىಈ ҆ఆՔಇ QZBQQΑΓ҆ఆʂ 教訓: Python の macOS .app 化は茨の道。 LaunchAgent + setproctitle が最適解。
  13. "84׆༻ϙΠϯτ "NB[PO#FESPDL ςΩετޙॲཧΤϯδϯʢ$MBVEF )BJLVʣ SBX Š ೝࣝ݁ՌΛͦͷ··ग़ྗ QPMJTI Š ۟ಡ఺ɾจମΛ੔͑Δ

    GPSNBM Š ܟޠɾϏδωεจମʹม׵ USBOTMBUF Š ೔ˠӳ ӳˠ೔ ຋༁ CVMMFUT Š Օ৚ॻ͖ʹ੔ܗ 4USBOET"HFOUT Ի੠Ͱ NBD04Λ௚઀ૢ࡞͢ΔΤʔδΣϯτ ϦϚΠϯμʔొ࿥ Š ʮʓʓΛϦϚΠϯυͯ͠ʯ ϒϥ΢βݕࡧ Š ʮʓʓΛௐ΂ͯʯ Իྔૢ࡞ Š ʮԻྔΛԼ͛ͯʯ ΞϓϦىಈ Š ʮ4MBDLΛ։͍ͯʯ "HFOU$PSF.FNPSZ ઐ໳༻ޠΛֶशͯ͠ 8IJTQFSਫ਼౓Λ޲্ ޠኮ஝ੵ Š υϝΠϯݻ༗ޠΛهԱ ϓϩϯϓτ஫ೖ Š 8IJTQFSͷώϯτʹࣗಈ௥Ճ ਫ਼౓޲্ Š ઐ໳༻ޠΛਖ਼֬ʹೝࣝ "QFY7PJDF8FC 7FSDFM 6QTUBTI 3FEJT #FESPDL1ZUIPOTFSWFSMFTT ཤྺ 8FCදࣔ Š ೝࣝ݁ՌΛΫϥ΢υʹಉظ *".ೝূ Š *".ϢʔβʔΩʔͰ #FESPDLݺͼग़͠ 4FSWFSMFTT Š 7FSDFM 'VODUJPOT 1ZUIPO
  14. ࠓޙͷల๬   ϗοτΩʔվળ ϝχϡʔૢ࡞ͳ͠ͰάϩʔόϧϗοτΩ ʔ͔Βଈ࠲ʹ࿥Ի։࢝ ໨ඪ Š ϫϯΩʔͰԻ੠ೖྗϞʔυ΁ 

     8JOEPXT൛΁ͷҠ২ QZTUSBZ GBTUFSXIJTQFSͰ 8JOEPXTͰ΋ಉ͡ମݧΛ࣮ݱ ٕज़ Š QZTUSBZGBTUFSXIJTQFS   ঝೝ෇͖ߪೖΤʔδΣϯτ ʮʓʓΛങͬͯʯˠ֬ೝεςοϓΛڬ ΜͰ࣮ߦ͢Δ "FHJT࿈ܞ ࿈ܞ Š "FHJT 4USBOET"HFOUT   J04ΩʔϘʔυ֦ு൛ J04ΩʔϘʔυ֦ுͰεϚϗ͔Β΋Ի ੠ೖྗΛ࣮ݱ ໨ඪ Š ͲͷσόΠεͰ΋੠Ͱೖྗ
  15. 46.."3: Ի੠ ʷ 8IJTQFSʷ #FESPDLͰ࣮༻πʔϧ͕׬੒ͨ͠ ΦϑϥΠϯਫ਼౓͸े෼ NMYXIJTQFS͸ "QQMF 4JMJDPO্ͰϦΞϧλΠϜʹ ಈ࡞ɻΫϥ΢υෆཁͰߴਫ਼౓

    ͳԻ੠ೝࣝΛ࣮ݱɻ #FESPDLͰޙॲཧΛڧԽ ͭͷϞʔυͰ༻్ʹԠͨ͡ม ׵ɻ $MBVEF)BJLVͷ ଎౓Ͱ࣮༻తͳϨεϙϯεΛ ࣮ݱɻ ݸਓ։ൃͷ୉ޣຯ ࣦഊʢQZBQQʣ΋ؚΊֶͯ ͼʹͳΔɻࣗ෼ͷ՝୊Λࣗ෼ ͰղܾͰ͖Δͷ͕ݸਓ։ൃͷ ໘ന͞ɻ ࠓޙ͸ 8JOEPXT൛΍ϞόΠϧ൛΋࡞͍͖͍ͬͯͨ ࣗ෼ͷ՝୊Λɺࣗ෼ͷπʔϧͰղܾ͢ΔɻͦΕ͕ݸਓ։ൃͷ୉ޣຯͰ͢ɻ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠