(*Masks were taken off for the picture only.)
Hi, this is kagaffy! I worked at Rakuma as an iOS engineer from January to March 2021. It was in fact the first time Rakuma had taken an intern, but thanks to everyone’s kindness and support, I was able to focus on development in a relaxed way. As a state of emergency had been declared, I fully worked from home except for the first and last days.
Today, I will introduce the details of my work and learnings. I have been keeping a diary every day for almost a year, so I am somewhat familiar with writing, but I feel fresh since this is my first blog!
The reason why I participated in this internship in the first place was because I had the opportunity to meet with a person from Rakuma at a Supporterz reverse recruitment event held on October 11, 2020. When I received an offer from HR a few days later while I was training at my favorite gym, I made an immediate decision.
So here is what I actually did!
Bug fixes and feature enhancements
Sorry to keep you waiting, engineers! I will talk about development from here.
As the first step, I modified the date format and adjusted the display position of images. I thought it would be a piece of cake since I usually do this in my part-time job, but I suddenly hit a wall: Objective-C.
It was my first time using Objective-C, so I was troubled by the difference between it and Swift. In particular, I especially had a hard time with type casting and using nil, which made me realize how safe Swift is as a language.
In such a situation, here are the three features I implemented.
- Focus on the search box when the Search tab is long-pressed - Twitter and Instagram have the same feature. The coding for the tab bar was in Objective-C.
- Scroll to the top when the Home tab is tapped - This is also found in various apps. Now you can return to top without tapping the status bar!
- Lower the product image below the status bar - On the product details screen, the product image was covered by the status bar (the top part showing the battery level, signal, time, etc.) and was partially hidden on iPhone X and later (models without Home button). I fixed this and also overlapped a blur effect image on the background to give it a stylish look.
The top two were immediately reflected in the next update.Although they were minor adjustments, I was happy to feel that I had contributed to a major service.
Replacing with Swift
Since I had the opportunity to use Objective-C, now I wanted to try replacing it with Swift. When I told that to my mentor, he agreed to let me work on Swiftizing some API service classes and view controllers!
I learned about unit testing and MVP architecture then. I had never written tests before, so it was very helpful to learn about the implementation of creating and passing mocks and returning different values for communication results depending on the situation. I also learned that the MVP architecture will allow me to test even UI events.
Introducing XcodeGen to Rakuma
Rakuma was not using XcodeGen, so I introduced this. This was probably the largest scale of work I did during my internship.
It all started with this conversation I happened to see.
I wanted to try this the moment I saw it because I wanted to do something positive for the development environment if I was going to do an internship.
That said, it was the first time for me to introduce it to an actual project from scratch, so it was quite a challenge. I used Spec generationfor the implementation and referred to the websites below.
First, a YML file of about 2,000 lines was created by Spec generation. Using this as a base, I created project.yml from scratch, then resolved errors one by one to finally be able to build.
After that, I edited build settings so that the difference with the original project file would be as small as possible. As mentioned in the post above, Xcode’s build settings show changes made from the default state in bold, so I looked at them and edited them one by one.
I was almost ready for review, but here are some other things you should keep in mind.
- Organize the file system tree beforehand - XcodeGen generates project files based on the file system tree. If you want to separate plist files for different schemes, such as Develop and Release, you should organize the directory beforehand or it will become troublesome.
- Use include and Setting Groups - This is also mentioned in the post above, but if you have a large project, project.yml will have quite a few lines (there were 1,000 lines before refactoring). Readability can be improved by using include to split files by target, or by using Setting Groups to cut out common parts.
The implementation was roughly like this, but actually this PR is still in the process of being reviewed! I’m applying for my employment period to be extended until the review is finished (just joking)!
I will be passing this on to someone else, but I would like to thank everyone who took part in the review.
This is not related to development, but I participated in Rakuma DU All Hands about a week after joining Rakuma. Rakuma DU All Hands is a really fun meeting held once a month where various teams in Rakuma gather to share development status and expand horizontal connections.
I gave a 10-minute self-introduction speech as a new member. It was the first time for me to introduce myself in front of a large group of 80 people, but I remember it was quite fun as I felt like I was doing a YouTube Live when I looked at the comments on Zoom.
In addition to that, I was also able to hear other engineers’ lightning talks and development stories of other teams.
This was the meeting I personally enjoyed the most!
I have talked about development so far. Next, I will talk about the challenges I encountered.
First of all, working from home was a challenge for me. I think there are advantages and disadvantages to this. I was able to cut my commuting time by almost three hours, which was huge! (It’s quite far from Kawagoe city to Futako Tamagawa.) Thanks to this, I could get plenty of sleep. On the other hand, there was not much communication outside of work. I wish I could have gotten to know my team members a little better!
Another issue I encountered was logging into GitHub. At Rakuma, we use GitHub for repository management. I did not have any problems until one day, the login session suddenly disappeared and I could not log in anymore.
日本時間3月9日12:03頃にGitHubにログインしている全ユーザーのセッションを無効化しました。これはごく少数のユーザーに影響を与える極めてまれなセキュリティ問題が発生する可能性があっためです。詳細はこちらをご覧ください。 https://t.co/zGREwlXwJl— GitHub Japan (@GitHubJapan) March 9, 2021
At Rakuma, 2-step authentication is required for GitHub accounts by default, but I had not set up my device to receive verification codes, so I could not log in until my inquiry to GitHub was approved. I was in a hurry because I only had about a week left until my internship ended!
Good things about the team
Last but not least, I would like to end with some good points about Rakuma’s client team.
The first point is that the team communicates closely with each other. Although I only talked to most of the team members through the screen, I did not feel much of a barrier because they were all very friendly. We also had a weekly meeting to report on individual outputs, but it never felt boring because it was bit like a chat time at the end of the meeting.
The second point is that code reviews are very thorough. On average, I received around 10 comments on the PRs I submitted during my internship; they were reviewed very thoroughly. I heard that one week the percentage of crash-free users (users not affected by crashes) was 99.9%. I think this number is due to the careful review culture the team had.
The third point is that the team values core values. There are three core values at Rakuma, and we reflected on them every week in meetings. I often find myself so focused on the task in front of me that I lose sight of my original goal, so in that sense, I thought this was a very good initiative.
I would like to thank everyone at Rakuma for being so flexible and accommodating to the sudden arrival of an intern. Thank you for taking time out of your busy schedule to take care of me for two months!