IfcOpenShellのインストール及び使い方
IfcOpenShellとは
IFCを色々こねくりまわせるパッケージ
C++かPythonのどちらかで。手軽に始めるならPythonがオススメ
IFCの中身をいじったりなどの基本内容だけでなく、実務に役立ちそうなパッケージが別途準備されており、コマンドラインから簡単に実行可能。
※追加インストール要。一部blenderを使うことでしか使えないツールも存在する。
IfcOpenShellインストール方法
※Python 3.10.6の環境下で実行
Zipをダウンロード
Zipを解凍し、blenderbim\libs\site\packagesへ移動
好きなパッケージを選択し、コピーする(Ctrl+C)。
適宜好きなパッケージを選んで、Ctrl+Cしてください。分からない人はとりあえず全部選んでCtrl+Cでも可。
例えば、以下名前のフォルダを選択する。
ifcopenshell
ifctester
Ifcpatch
Pythonのsite-packagesフォルダへコピペ
各自のPythonのsite-packagesフォルダへ、先ほどCtrl+Cしたものをペーストする。(Ctrl+P)なお、自身のPython環境のsite-packagesフォルダの位置は以下の方法で確認する。
コマンドプロンプトを開いて、下記を打てばOK
python -c "import site; print ( site.getsitepackages())"
実行確認
実行確認のついでに、IfcOpenShellでIFCのオブジェクトの情報を探ってみる。
サンプルIFC
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]','RevitIdentifiers [VersionGUID: 446dd598-e4f6-4fcb-bd4a-61ab0c007d8a, NumberOfSaves: 8]','CoordinateReference [CoordinateBase: Shared Coordinates, ProjectSite: Default Site]'),'2;1');
FILE_NAME('Project Number','2023-10-06T17:36:55+09:00',(''),(''),'ODA SDAI 24.3','Autodesk Revit 24.1.11.26 (ENU) - IFC 24.1.1.6','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
#1=IFCORGANIZATION($,'Autodesk Revit 2024 (ENU)',$,$,$);
#2=IFCAPPLICATION(#1,'2024','Autodesk Revit 2024 (ENU)','Revit');
#3=IFCCARTESIANPOINT((0.,0.,0.));
#4=IFCCARTESIANPOINT((0.,0.));
#5=IFCDIRECTION((1.,0.,0.));
#6=IFCDIRECTION((-1.,0.,0.));
#7=IFCDIRECTION((0.,1.,0.));
#8=IFCDIRECTION((0.,-1.,0.));
#9=IFCDIRECTION((0.,0.,1.));
#10=IFCDIRECTION((0.,0.,-1.));
#11=IFCDIRECTION((1.,0.));
#12=IFCDIRECTION((-1.,0.));
#13=IFCDIRECTION((0.,1.));
#14=IFCDIRECTION((0.,-1.));
#15=IFCPERSON($,'','s.suzukiEA8RA',$,$,$,$,$);
#16=IFCORGANIZATION($,'','',$,$);
#17=IFCPERSONANDORGANIZATION(#15,#16,$);
#18=IFCOWNERHISTORY(#17,#2,$,.NOCHANGE.,$,$,$,1696570013);
#19=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#20=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#21=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#22=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#23=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#24=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
#25=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.017453292519943278),#23);
#26=IFCCONVERSIONBASEDUNIT(#24,.PLANEANGLEUNIT.,'DEGREE',#25);
#27=IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.);
#28=IFCDERIVEDUNITELEMENT(#27,1);
#29=IFCDERIVEDUNITELEMENT(#20,-3);
#30=IFCDERIVEDUNIT((#28,#29),.MASSDENSITYUNIT.,$);
#31=IFCDERIVEDUNIT((#28,#29),.IONCONCENTRATIONUNIT.,$);
#32=IFCDERIVEDUNITELEMENT(#20,4);
#33=IFCDERIVEDUNIT((#32),.MOMENTOFINERTIAUNIT.,$);
#34=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
#35=IFCSIUNIT(*,.FREQUENCYUNIT.,$,.HERTZ.);
#36=IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.KELVIN.);
#37=IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.DEGREE_CELSIUS.);
#38=IFCDERIVEDUNITELEMENT(#36,-1);
#39=IFCDERIVEDUNITELEMENT(#34,-3);
#40=IFCDERIVEDUNIT((#28,#38,#39),.THERMALTRANSMITTANCEUNIT.,$);
#41=IFCDERIVEDUNITELEMENT(#20,1);
#42=IFCDERIVEDUNIT((#28,#38,#39,#41),.THERMALCONDUCTANCEUNIT.,$);
#43=IFCSIUNIT(*,.LENGTHUNIT.,.DECI.,.METRE.);
#44=IFCDERIVEDUNITELEMENT(#43,3);
#45=IFCDERIVEDUNITELEMENT(#34,-1);
#46=IFCDERIVEDUNIT((#44,#45),.VOLUMETRICFLOWRATEUNIT.,$);
#47=IFCDERIVEDUNIT((#28,#45),.MASSFLOWRATEUNIT.,$);
#48=IFCDERIVEDUNIT((#45),.ROTATIONALFREQUENCYUNIT.,$);
#49=IFCSIUNIT(*,.ELECTRICCURRENTUNIT.,$,.AMPERE.);
#50=IFCSIUNIT(*,.ELECTRICVOLTAGEUNIT.,$,.VOLT.);
#51=IFCSIUNIT(*,.POWERUNIT.,$,.WATT.);
#52=IFCSIUNIT(*,.FORCEUNIT.,.KILO.,.NEWTON.);
#53=IFCSIUNIT(*,.ILLUMINANCEUNIT.,$,.LUX.);
#54=IFCSIUNIT(*,.LUMINOUSFLUXUNIT.,$,.LUMEN.);
#55=IFCSIUNIT(*,.LUMINOUSINTENSITYUNIT.,$,.CANDELA.);
#56=IFCSIUNIT(*,.ENERGYUNIT.,$,.JOULE.);
#57=IFCDERIVEDUNITELEMENT(#27,-1);
#58=IFCDERIVEDUNITELEMENT(#20,-2);
#59=IFCDERIVEDUNITELEMENT(#34,3);
#60=IFCDERIVEDUNITELEMENT(#54,1);
#61=IFCDERIVEDUNIT((#57,#58,#59,#60),.USERDEFINED.,'Luminous Efficacy');
#62=IFCDERIVEDUNITELEMENT(#20,3);
#63=IFCDERIVEDUNITELEMENT(#49,-2);
#64=IFCDERIVEDUNIT((#28,#39,#62,#63),.USERDEFINED.,'Electrical Resistivity');
#65=IFCDERIVEDUNITELEMENT(#20,2);
#66=IFCDERIVEDUNIT((#28,#39,#65),.SOUNDPOWERUNIT.,$);
#67=IFCDERIVEDUNITELEMENT(#20,-1);
#68=IFCDERIVEDUNITELEMENT(#34,-2);
#69=IFCDERIVEDUNIT((#28,#67,#68),.SOUNDPRESSUREUNIT.,$);
#70=IFCDERIVEDUNIT((#41,#45),.LINEARVELOCITYUNIT.,$);
#71=IFCSIUNIT(*,.PRESSUREUNIT.,$,.PASCAL.);
#72=IFCDERIVEDUNIT((#28,#58,#68),.USERDEFINED.,'Friction Loss');
#73=IFCDERIVEDUNIT((#28,#68),.LINEARFORCEUNIT.,$);
#74=IFCDERIVEDUNIT((#28,#67,#68),.PLANARFORCEUNIT.,$);
#75=IFCDERIVEDUNIT((#38,#65,#68),.SPECIFICHEATCAPACITYUNIT.,$);
#76=IFCDERIVEDUNIT((#28,#39),.HEATFLUXDENSITYUNIT.,$);
#77=IFCDERIVEDUNIT((#65,#68),.HEATINGVALUEUNIT.,$);
#78=IFCDERIVEDUNITELEMENT(#34,1);
#79=IFCDERIVEDUNIT((#67,#78),.VAPORPERMEABILITYUNIT.,$);
#80=IFCDERIVEDUNIT((#28,#45,#67),.DYNAMICVISCOSITYUNIT.,$);
#81=IFCDERIVEDUNIT((#38),.THERMALEXPANSIONCOEFFICIENTUNIT.,$);
#82=IFCDERIVEDUNIT((#28,#67,#68),.MODULUSOFELASTICITYUNIT.,$);
#83=IFCDERIVEDUNIT((#57,#62),.ISOTHERMALMOISTURECAPACITYUNIT.,$);
#84=IFCDERIVEDUNIT((#45,#65),.MOISTUREDIFFUSIVITYUNIT.,$);
#85=IFCDERIVEDUNIT((#28,#67),.MASSPERLENGTHUNIT.,$);
#86=IFCDERIVEDUNITELEMENT(#36,1);
#87=IFCDERIVEDUNIT((#57,#59,#86),.THERMALRESISTANCEUNIT.,$);
#88=IFCDERIVEDUNIT((#41,#68),.ACCELERATIONUNIT.,$);
#89=IFCDERIVEDUNITELEMENT(#23,1);
#90=IFCDERIVEDUNIT((#45,#89),.ANGULARVELOCITYUNIT.,$);
#91=IFCDERIVEDUNIT((#28,#68),.LINEARSTIFFNESSUNIT.,$);
#92=IFCDERIVEDUNITELEMENT(#20,6);
#93=IFCDERIVEDUNIT((#92),.WARPINGCONSTANTUNIT.,$);
#94=IFCDERIVEDUNIT((#28,#41,#68),.LINEARMOMENTUNIT.,$);
#95=IFCDERIVEDUNIT((#28,#65,#68),.TORQUEUNIT.,$);
#96=IFCUNITASSIGNMENT((#19,#21,#22,#26,#27,#30,#31,#33,#34,#35,#37,#40,#42,#46,#47,#48,#49,#50,#51,#52,#53,#54,#55,#56,#61,#64,#66,#69,#70,#71,#72,#73,#74,#75,#76,#77,#79,#80,#81,#82,#83,#84,#85,#87,#88,#90,#91,#93,#94,#95));
#97=IFCAXIS2PLACEMENT3D(#3,$,$);
#98=IFCDIRECTION((6.1230317691118863E-17,1.));
#99=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.01,#97,#98);
#100=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#99,$,.GRAPH_VIEW.,$);
#101=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#99,$,.MODEL_VIEW.,$);
#102=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#99,$,.MODEL_VIEW.,$);
#103=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('FootPrint','Model',*,*,*,*,#99,$,.MODEL_VIEW.,$);
#104=IFCPROJECT('1cavUgQ9z6zOHh3NQdzpv7',#18,'Project Number',$,$,'Project Name','Project Status',(#99),#96);
#105=IFCCLASSIFICATION('CSI (Construction Specifications Institute)','1998',$,'Uniformat');
#106=IFCAXIS2PLACEMENT3D(#3,$,$);
#107=IFCLOCALPLACEMENT(#118,#106);
#108=IFCPOSTALADDRESS($,$,$,$,('Enter address here'),$,'','Boston','','MA');
#109=IFCBUILDING('1cavUgQ9z6zOHh3NQdzpv6',#18,'\X2\6A4B6881\X0\ID',$,$,#107,$,'\X2\6A4B6881540D\X0\',.ELEMENT.,$,$,#108);
#110=IFCAXIS2PLACEMENT3D(#3,$,$);
#111=IFCLOCALPLACEMENT(#107,#110);
#112=IFCBUILDINGSTOREY('1qv6ynVKX7xf87anS8vNi1',#18,'Level 1',$,'Level:8mm Head',#111,$,'Level 1',.ELEMENT.,0.);
#113=IFCCARTESIANPOINT((0.,0.,3000.));
#114=IFCAXIS2PLACEMENT3D(#113,$,$);
#115=IFCLOCALPLACEMENT(#107,#114);
#116=IFCBUILDINGSTOREY('1qv6ynVKX7xf87anS8vN2n',#18,'Level 2',$,'Level:8mm Head',#115,$,'Level 2',.ELEMENT.,3000.);
#117=IFCAXIS2PLACEMENT3D(#3,$,$);
#118=IFCLOCALPLACEMENT($,#117);
#119=IFCSITE('1cavUgQ9z6zOHh3NQdzpv5',#18,'Default',$,$,#118,$,$,.ELEMENT.,(42,21,31,401672),(-71,-3,-24,-318237),0.,$,$);
#120=IFCAXIS2PLACEMENT3D(#3,$,$);
#122=IFCCARTESIANPOINT((0.,0.));
#123=IFCAXIS2PLACEMENT2D(#122,#11);
#124=IFCRECTANGLEPROFILEDEF(.AREA.,'Generic Models 1',#123,1000.0000000000001,1000.0000000000001);
#125=IFCAXIS2PLACEMENT3D(#3,#9,#6);
#126=IFCEXTRUDEDAREASOLID(#124,#125,#9,2000.0000000000002);
#127=IFCSHAPEREPRESENTATION(#101,'Body','SweptSolid',(#126));
#128=IFCAXIS2PLACEMENT3D(#3,$,$);
#129=IFCREPRESENTATIONMAP(#128,#127);
#130=IFCBUILDINGELEMENTPROXYTYPE('0gHHgZqz9DfQ3VrAiQxThP',#18,'Generic Models 1:Generic Models 1',$,$,$,(#129),'422031',$,.NOTDEFINED.);
#131=IFCMATERIAL('<Unnamed>');
#132=IFCCARTESIANTRANSFORMATIONOPERATOR3D($,$,#3,1.,$);
#133=IFCMAPPEDITEM(#129,#132);
#134=IFCSHAPEREPRESENTATION(#101,'Body','MappedRepresentation',(#133));
#135=IFCPRODUCTDEFINITIONSHAPE($,$,(#134));
#136=IFCAXIS2PLACEMENT3D(#3,$,$);
#137=IFCLOCALPLACEMENT(#111,#136);
#138=IFCBUILDINGELEMENTPROXY('0gHHgZqz9DfQ3VrAiQxTh7',#18,'Generic Models 1:Generic Models 1:422033',$,'Generic Models 1:Generic Models 1',#137,#135,'422033',$);
#139=IFCPROPERTYSINGLEVALUE('Reference',$,IFCIDENTIFIER('Generic Models 1'),$);
#140=IFCPROPERTYSET('1bHmkIEvSTz8lbB8R1yjYQ',#18,'Pset_BuildingElementProxyCommon',$,(#139));
#141=IFCPROPERTYSET('1ekbo2D_Ue8Oplqi$6BztZ',#18,'Pset_QuantityTakeOff',$,(#139));
#142=IFCRELDEFINESBYPROPERTIES('13p$nvlddKiFvOa1DWRujn',#18,$,$,(#138),#140);
#143=IFCRELDEFINESBYPROPERTIES('0xpMZUdDRbByn_4bAdx0GQ',#18,$,$,(#138),#141);
#144=IFCPROPERTYSINGLEVALUE('Name',$,IFCLABEL('Level 1'),$);
#145=IFCPROPERTYSET('1YBdRTmfJCIxHb4iq$X5hG',#18,'Pset_AirSideSystemInformation',$,(#144));
#146=IFCPROPERTYSINGLEVALUE('AboveGround',$,IFCLOGICAL(.U.),$);
#147=IFCPROPERTYSET('2FpkwSYp_WPXHXSnB$WXnQ',#18,'Pset_BuildingStoreyCommon',$,(#146));
#148=IFCPROPERTYSINGLEVALUE('Name',$,IFCLABEL('Level 1'),$);
#149=IFCPROPERTYSET('16K95Bsg5m5WfcjoVcoalf',#18,'Pset_ProductRequirements',$,(#148));
#150=IFCRELDEFINESBYPROPERTIES('23IAhMiR$rPO$VPJ8IfOTw',#18,$,$,(#112),#145);
#151=IFCRELDEFINESBYPROPERTIES('2lSNXjGSsDeAQi9xx0QS91',#18,$,$,(#112),#147);
#152=IFCRELDEFINESBYPROPERTIES('0xnRGZgngPt7YK_n3Qhp$h',#18,$,$,(#112),#149);
#153=IFCRELCONTAINEDINSPATIALSTRUCTURE('1qv6ynVKX7xf87anO8vNi1',#18,$,$,(#138),#112);
#154=IFCPROPERTYSINGLEVALUE('Name',$,IFCLABEL('Level 2'),$);
#155=IFCPROPERTYSET('2_Sns8qUKqUL30ou9Iorzb',#18,'Pset_AirSideSystemInformation',$,(#154));
#156=IFCPROPERTYSET('3YbViPlCmt$6JvhxxkVq3q',#18,'Pset_BuildingStoreyCommon',$,(#146));
#157=IFCPROPERTYSINGLEVALUE('Name',$,IFCLABEL('Level 2'),$);
#158=IFCPROPERTYSET('0WBVj1923RprPL2tvQrPk4',#18,'Pset_ProductRequirements',$,(#157));
#159=IFCRELDEFINESBYPROPERTIES('0alDWRO_DXz$wOE02qybwO',#18,$,$,(#116),#155);
#160=IFCRELDEFINESBYPROPERTIES('0mxirAbkN2rgQssadNtef7',#18,$,$,(#116),#156);
#161=IFCRELDEFINESBYPROPERTIES('17EcBbLz$MHAUkZGjZhdMI',#18,$,$,(#116),#158);
#162=IFCRELAGGREGATES('1HyEgyHuSI4OJ2SrppYcUa',#18,$,$,#104,(#119));
#163=IFCRELAGGREGATES('2QoZzlZxWV377yCqGMpv3x',#18,$,$,#119,(#109));
#164=IFCRELAGGREGATES('3mQBaTfuH9QBHDcYQBQvNl',#18,$,$,#109,(#112,#116));
#165=IFCPROPERTYSINGLEVALUE('NumberOfStoreys',$,IFCINTEGER(1),$);
#166=IFCPROPERTYSINGLEVALUE('IsLandmarked',$,IFCLOGICAL(.U.),$);
#167=IFCPROPERTYSET('2CtkUpiA65XcRss535qKHH',#18,'Pset_BuildingCommon',$,(#165,#166));
#168=IFCPROPERTYSINGLEVALUE('\X2\8DEF7DDA540D\X0\',$,IFCLABEL('\X2\8DEF7DDA540D\X0\'),$);
#169=IFCPROPERTYSINGLEVALUE('\X2\4EE366FF8DEF306E67097121\X0\',$,IFCBOOLEAN(.T.),$);
#170=IFCPROPERTYSINGLEVALUE('\X2\67B68A2D5E746B21\X0\',$,IFCINTEGER(1),$);
#171=IFCPROPERTYSINGLEVALUE('\X2\6A4B9577\X0\',$,IFCREAL(1.),$);
#172=IFCPROPERTYSINGLEVALUE('\X2\5E4554E1\X0\',$,IFCREAL(3648.),$);
#173=IFCPROPERTYSINGLEVALUE('\X2\624057285730\X0\',$,IFCLABEL('\X2\624057285730\X0\'),$);
#174=IFCPROPERTYSINGLEVALUE('\X2\7DEF5EA6\X0\',$,IFCLABEL('\X2\7DEF5EA6\X0\'),$);
#175=IFCPROPERTYSINGLEVALUE('\X2\7D4C5EA6\X0\',$,IFCLABEL('\X2\7D4C5EA6\X0\'),$);
#176=IFCPROPERTYSINGLEVALUE('\X2\7BA174068005540D\X0\',$,IFCLABEL('\X2\7BA174068005540D\X0\'),$);
#177=IFCPROPERTYSINGLEVALUE('\X2\8DEF4E0B67614EF6\X0\',$,IFCLABEL('\X2\8DEF4E0B67614EF6\X0\'),$);
#178=IFCPROPERTYSINGLEVALUE('\X2\81EA5C029053\X0\or\X2\4E00822C9053\X0\',$,IFCLABEL('\X2\81EA5C029053\X0\or\X2\4E00822C9053\X0\'),$);
#179=IFCPROPERTYSINGLEVALUE('\X2\5360752872694EF6\X0\',$,IFCLABEL('\X2\5360752872694EF6\X0\'),$);
#180=IFCPROPERTYSINGLEVALUE('\X2\6A4B68815F625F0F\X0\',$,IFCLABEL('\X2\6A4B68815F625F0F\X0\'),$);
#181=IFCPROPERTYSINGLEVALUE('\X2\7DCA60258F38900190538DEF\X0\',$,IFCLABEL('\X2\7DCA60258F38900190538DEF\X0\'),$);
#182=IFCPROPERTYSET('0HotL2eSh$TgNk_3qV_n$s',#18,'\X2\90538DEF6A4B70B9691C89819818\X0\','',(#168,#169,#170,#171,#172,#173,#174,#175,#176,#177,#178,#179,#180,#181));
#183=IFCRELDEFINESBYPROPERTIES('1PYPsIqVR1GiT_Gg9vGo4r',#18,$,$,(#109),#167);
#184=IFCRELDEFINESBYPROPERTIES('1nXJNCslCVcgH0thk81_KO',#18,$,$,(#109),#182);
#185=IFCRELASSOCIATESMATERIAL('1UDoQBMOoYj5$buPHqhmrh',#18,$,$,(#130,#138),#131);
#186=IFCRELDEFINESBYTYPE('32VmxHBM3a_ivNyqcIIb3q',#18,$,$,(#138),#130);
#187=IFCPRESENTATIONLAYERASSIGNMENT('A-GENM',$,(#127,#134),$);
ENDSEC;
END-ISO-10303-21;
サンプルコード
import ifcopenshell
file = ifcopenshell.open('RC_Column.ifc')
columns = file.by_type('IfcColumn')
for i in columns:
print(i.Name)
プログラムの説明を下記に記載します。
Ifcopenshellを使う際は必ずプログラム内でおまじないを宣言する。
import ifcopenshell
読み込みたいIFCファイルを指定する。
※プログラムと別の場所にIFCが保存してある場合は、名前だけでなくパスを設定すること
file = ifcopenshell.open('RC_Column.ifc‘)
指定したIFCファイルのうち、どのエンティティに対する処理を行うか指定する。
columns = file.by_type('IfcColumn‘)
取得した数ぶん全て表示する。今回はAttributeのNameなので、これでOK
for i in columns:
print(i.Name)
実行結果
プログラム作成環境
プログラム作成やIFCのコード閲覧には、Visual Studio Code(IDEの一種)がオススメ。
コード記述と実行が1画面で済むので、効率的にコード記述が出来る。
Extensionsで、「IFC Syntax」と調べて、インストールすると、IFCのコードが色分けされて、閲覧に便利。
IfcOpenShellに含まれるパッケージ紹介
- IfcTester
IDSによるIFC照査を行うことが出来る。 - IfcCsv
IFCの内部情報をCSVで出力出来る - IfcDiff
2つのIFC間の変更内容を検出出来る - IfcClash
IFC内での干渉を検出出来る - Ifc2JSON
IFCをJSONに変換出来る - VoxelisationToolkit
IFCを使った空間解析が出来る
IfcOpenShellのDocumentationには全て網羅して親切に使用方法が書いているわけでは無い。
とりあえず、コマンドプロンプトで、 python -m パッケージ名 -h と打ってみる。
すると、パッケージの使用方法が簡単に出てくるので、読んでみることが重要。
※英語で内容が分からない場合は、それで逃げるのではなく、まず翻訳ツールを使ってみること!!!!
詰まったときは・・・
- エラー内容をしっかり読む。英語が分からないときは、翻訳ツールを使用してみる。Google翻訳より、DeepLなどがオススメ
- ChatGPTをフル活用する。ある程度ドキュメントを読み込んでいなくても色々解決してくれる
- ただし、結局はドキュメントに戻ってくる。ドキュメントを読み込むこと。
Discussion